2013-09-06 5 views
5

में SHA256 हैश स्टोर करने के लिए मैं SQL सर्वर में SHA256 हैश संग्रहीत करते समय उपयोग करने के लिए डेटाटाइप पर बहस कर रहा हूं। यह चार्ज (64) या बिनरी (32) होना चाहिए ... कॉलम एक अद्वितीय क्लस्टर सूचकांक का हिस्सा होगा। मुझे पता है कि मैं शायद इस बिंदु पर बाल बांट रहा हूं, हालांकि मैं पहली बार यह सही करना चाहता हूं और मुझे पता है कि कभी-कभी आदिम डेटा प्रकार तेजी से होते हैं और अन्य बार नए और विदेशी प्रकार बेहतर प्रदर्शन करते हैं। (हाँ मुझे पता है कि चार (64) वह नया नहीं है, लेकिन यह बाइट स्टोरेज से नया है)CHAR (64) या बिनरी (32) SQL सर्वर

मैंने चारों ओर देखा है और खोज के मामले में एक बनाम दूसरे के प्रदर्शन के बारे में कुछ भी नहीं मिला , आदि

+2

के बजाय char का उपयोग करने का एकमात्र कारण होगा, क्या यह मदद करता है? http://stackoverflow.com/questions/252156/sql-server-2005-what-data-type-to-use-to-store-passwords-hashed-by-sha-256-algo – dcaswell

+1

मैं बाइनरी का उपयोग करूंगा (32) बस क्योंकि कोई कारण नहीं है कि मैं चार (64) के लिए बहस कर सकता हूं - एकमात्र कारण है कि मैं बाद में बहस क्यों करूंगा कि अगर सभी काम लगभग सीएलआई के माध्यम से किया जाता है (लेकिन फिर रूपांतरण कार्यों का उपयोग मानव संपर्क के लिए किया जा सकता है) । प्रोग्रामेटिक रूप से, कच्चे डेटा का इलाज करना उतना आसान है जितना आसान नहीं है। इसके परिणामस्वरूप थोड़ा कम स्थान (-> कभी भी इतनी छोटी इंडेक्स/कभी भी तेज तुलना) होता है और चूंकि मैं चार (64) के लिए बहस नहीं कर सकता, साथ ही साथ मुफ्त लाभ भी ले सकता हूं। – user2246674

+0

जो मैं देख रहा हूं उससे बाइनरी (32) में चार (64) पर थोड़ा सा किनारा है और मैं केवल SQL पक्ष पर उस कॉलम का उपयोग करूंगा। यहां वर्णित समीकरण के दूसरी तरफ कोड में उपयोगिता है, हालांकि मैं उस मामूली किनारे को हासिल करना चाहता हूं और यदि कोई वास्तव में मौजूद है तो अतिरिक्त देव जटिलता खाएं। तो .. मैं बिनरी (32) का उपयोग करने जा रहा हूं। http://stackoverflow.com/a/16993150/128795 – kroolk

उत्तर

0

आप जानते हैं कि CHAR (64) का उपयोग करके, प्रत्येक पंक्ति 64 बिट्स पर कब्जा कर लेगी, भले ही आपकी कुंजी "ए" हो? मैं इस तथ्य पर चर्चा नहीं कर रहा हूं कि आप एक क्लस्टर इंडेक्स के रूप में एक स्ट्रिंग का उपयोग कर रहे हैं, मुझे लगता है कि आपके पास इसके लिए एक अच्छा कारण है, लेकिन VARCHAR के बजाय CHAR का उपयोग करना? क्या आप मूल्य को अपडेट करने की योजना बना रहे हैं? क्योंकि यही कारण है कि मैं वर्कर

+1

एक SHA256 हैश हमेशा 64 वर्ण लेगा। इस प्रकार चार्ज बनाम वचर। उपर्युक्त टिप्पणियों से मेरा मानना ​​है कि बिनरी (32) जाने का रास्ता है। कारण है कि मैं हैश का उपयोग कर रहा हूं क्योंकि मेरे पास पाठ की बिट्स हैं जो अनन्य होने की आवश्यकता है (लेन में 2048) और मैं स्ट्रिंग प्रस्तुतीकरण की तुलना में हैश की तुलना में अधिक तेज़ी से तुलना कर सकता हूं और SHA256 टकराव की कम संभावना को देखते हुए मुझे अच्छा लगता है प्रदर्शन बढ़ावा यह तालिका अत्यधिक लेनदेन नहीं है, या प्रारंभिक डेटा आबादी के बाद नहीं होगी, लेकिन अक्सर पढ़ा जाएगा। आपके विचारों की सराहना की जाती है इसलिए प्रतिक्रिया/आलोचना करने में संकोच न करें। – kroolk

+1

@kroolk SHA256 आपके उद्देश्यों के लिए बड़े पैमाने पर ओवरकिल है। यदि आप गैर-बिल्टिन के लिए चारों ओर खोजना नहीं चाहते हैं तो आप एक तेज़ गैर-क्रिप्टोग्राफ़िक हैश के साथ जा सकते हैं। (गिटहब पर एक .NET CityHash लाइब्रेरी है लेकिन इसमें मूल डीएलएल शामिल है: https://github.com/gmarz/CityHash) – millimoose

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