2009-04-16 16 views
6

हमारे पास एक मूल्य निर्धारण डेटासेट है जो निहित मानों या रिकॉर्ड्स की संख्या को बदलता है। मूल्यों में परिवर्तनों की तुलना में जोड़े गए या हटाए गए रिकॉर्ड की संख्या छोटी है। डेटासेट में आमतौर पर 8 गुणों के साथ 50 से 500 आइटम होते हैं।बेस्ट हैश फ़ंक्शन?

हम वर्तमान में AJAX का उपयोग एक JSON संरचना को वापस करने के लिए करते हैं जो डेटासेट का प्रतिनिधित्व करता है और इस संरचना का उपयोग करके नए वेब मानों के साथ एक वेबपृष्ठ अपडेट करता है और जहां आइटम को हटाने या जोड़ने के लिए आवश्यक है।

हम दो हैश मानों के साथ अनुरोध करते हैं, एक मूल्य के लिए और दूसरे रिकॉर्ड के लिए। ये एमएस 5 हैंश जेएसओएन संरचना के साथ निम्नलिखित अनुरोध के साथ भेजे जाने के लिए लौटे हैं। यदि हैश में कोई बदलाव है तो हमें पता है कि हमें एक नई JSON संरचना की आवश्यकता है अन्यथा हैश को बैंडविड्थ को बचाने और अनावश्यक क्लाइंट-साइड प्रसंस्करण को खत्म करने के लिए वापस कर दिया गया है।

चूंकि एमडी 5 आमतौर पर एन्क्रिप्शन के साथ प्रयोग किया जाता है, केवल डेटा परिवर्तनों का पता लगाने के लिए हैशिंग एल्गोरिदम का सबसे अच्छा विकल्प है?

हम मूल्यों और अद्यतनों में परिवर्तन का पता लगाने के साथ-साथ अतिरिक्त या हटाए गए आइटमों का पता लगाने और पृष्ठ डीओएम को तब्दील करने के वैकल्पिक तरीकों का पता लगा सकते हैं?

उत्तर

10

MD5 डेटा के एक सेट में परिवर्तनों का पता लगाने के लिए एक उचित एल्गोरिदम है। हालांकि, यदि आप क्रिप्टोग्राफिक गुणों से चिंतित नहीं हैं, और एल्गोरिदम के प्रदर्शन से बहुत चिंतित हैं, तो आप एक सरल चेकसम-शैली एल्गोरिदम के साथ जा सकते हैं जिसे क्रिप्टोग्राफ़िक रूप से सुरक्षित नहीं बनाया गया है। (हालांकि हाल के वर्षों में एमडी 5 में कमजोरियों की खोज की गई है, फिर भी यह क्रिप्टोग्राफिक रूप से सुरक्षित होने के लिए डिज़ाइन किया गया है, और इसलिए आपके परिदृश्य के लिए आवश्यकतानुसार अधिक काम करता है)।

हालांकि, अगर आप एमडी 5 के कम्प्यूटेशनल प्रदर्शन से खुश हैं, तो मैं बस इसके साथ रहूंगा।

-3

मुझे लगता है कि किसी भी सामान्य रूप से उपयोग किया गया हैश फ़ंक्शन वह करेगा जो आप चाहते हैं - एक इकाई का अनूठा प्रतिनिधित्व प्रदान करें।

समस्या के लिए आप हल करने का प्रयास कर रहे हैं, मेरे समाधान में बैकएंड टेबल होना होगा जो सभी परिवर्तनों को रिकॉर्ड करता है। स्वयं परिवर्तन नहीं, लेकिन पंक्तियों की पहचानकर्ता जो बदल गए हैं। आवधिक आधार पर सर्वर पर कॉलबैक और बदले गए सभी ऑब्जेक्ट्स की एक सूची प्राप्त करें, और क्लाइंट पर निर्णय लेने के लिए इसका उपयोग करें, जिसमें पंक्तियों को अद्यतन/हटाने/जोड़ने की आवश्यकता है।

+1

यह एक आम गलतफहमी है। हैश फ़ंक्शंस "किसी इकाई का अनूठा प्रतिनिधित्व प्रदान नहीं करते हैं"। वास्तव में, यह गारंटी है कि किसी भी हैश फ़ंक्शन का मामला न हो, जिसका डोमेन इसकी सीमा से बड़ा है। – recursive

0

आप जो कर रहे हैं वह मेरे लिए बहुत अच्छा लगता है।

यदि सर्वर-साइड क्षमता सस्ता है और नेटवर्क उपयोग को कम करना महत्वपूर्ण है, तो आप सर्वर को याद कर सकते हैं, प्रत्येक क्लाइंट के लिए, यह अंतिम डेटासेट क्या था, और केवल अंतर (प्रविष्टियों, हटाने और संपादनों की सूची के रूप में)) प्रत्येक अनुरोध पर। यदि आप पहले अपनी डेटा पंक्तियों को सॉर्ट करते हैं, तो इन मतभेदों को एक अलग-अलग एल्गोरिदम का उपयोग करके काफी कुशलता से गणना की जा सकती है जैसे कि diff द्वारा उपयोग किया जाता है।

यह दृष्टिकोण नेटवर्क आउटेज के प्रति संवेदनशील है - यदि ग्राहक द्वारा एक प्रतिक्रिया प्राप्त नहीं होती है, तो त्रुटियां जमा हो जाएंगी। हालांकि क्लाइंट को प्रत्येक अनुरोध के साथ एमडी 5 हैश भेजकर इसका उपचार किया जा सकता है: यदि यह सर्वर की अपेक्षा से अलग है, तो परिवर्तन की सूची के बजाय एक पूरी सूची भेजी जाएगी।

4

MD5 बस ठीक है। यदि इसका बहुत कम प्रदर्शन होना चाहिए, तो आप तेजी से चेकसम एल्गोरिदम का प्रयास कर सकते हैं, उदाहरण के लिए Adler-32

0

मैं एमडी 5 के बारे में जोनाथन के जवाब से सहमत हूं। परिवर्तनों का पता लगाने के वैकल्पिक तरीकों के लिए, यदि आप सर्वर पर सबसे हालिया परिवर्तन के समय/तिथि को स्टोर (या पहले से ही स्टोर) करने के इच्छुक हैं, तो आप ग्राहक को आगे और आगे भेज सकते हैं।आप पूरी तरह से गणना से बचें और आप अपने मौजूदा कोड का उपयोग करने में भी सक्षम हो सकते हैं।

-
बीएमबी

संबंधित मुद्दे