2012-04-04 17 views
5

में समकक्ष हैशसेट मैं एक बड़ी तालिका (लगभग 45 अरब पंक्तियां) बनाना चाहता हूं जो हमेशा एक अद्वितीय कुंजी द्वारा उपयोग की जाती है।एसक्यूएल सर्वर

डीबी के बाहर, इसे पकड़ने के लिए सबसे अच्छी संरचना एक शब्दकोश या हैशसेट है, लेकिन निश्चित रूप से डेटा के आकार के कारण, डेटाबेस के बाहर ऐसा करना संभव नहीं है।

क्या SQL सर्वर एक संरचना प्रदान करता है जो कुंजी-मूल्य पहुंच के लिए अनुकूलित है? मैं समझता हूं कि क्लस्टर्ड कुंजी बहुत तेज़ है, लेकिन फिर भी यह एक सूचकांक है और इसलिए ट्रैवरिंग इंडेक्स पृष्ठों से जुड़े कुछ अतिरिक्त डिस्क पढ़े जाएंगे। मैं SQL सर्वर से जो प्राप्त करना चाहता हूं वह एक "मूल" संरचना है जो डेटा को कुंजी-मूल्य जोड़े के रूप में संग्रहीत करती है और फिर कुंजी के आधार पर मानों तक पहुंच बनाना संभव बनाता है।

दूसरे शब्दों में, मेरा प्रश्न यह है कि SQL सर्वर 45 बिलियन पंक्तियों में संग्रहीत करने के लिए और सूचकांक, क्लस्टर या गैर-क्लस्टर किए बिना कुशलता से उन्हें कैसे एक्सेस किया जा सकता है, क्योंकि इंडेक्स गैर-पत्ते वाले पृष्ठों को पढ़ने से पर्याप्त आईओ हो सकता है, और चूंकि प्रत्येक मान को एक अनूठी कुंजी द्वारा एक्सेस किया जा सकता है, इसलिए ऐसी संरचना होनी चाहिए जहां एक कुंजी का हैश मूल्य के भौतिक स्थान में हल हो। 1 मान प्राप्त करने के लिए, हमें 1 पढ़ना होगा (जब तक हैश टकराव नहीं हो)।

आपकी मदद के लिए धन्यवाद (Oracle में एक बराबर हैश क्लस्टर है)।

उत्तर

3

SQL सर्वर में ऐसी कोई चीज़ नहीं है। आपका एकमात्र विकल्प एक सूचकांक है। यदि आप किसी दिए गए कुंजी के लिए सभी कॉलम का अनुरोध करने जा रहे हैं, तो आपको क्लस्टर्ड इंडेक्स का उपयोग करना चाहिए। आप केवल एक उप समूह का अनुरोध करने जा रहे हैं, तो आप केवल कॉलम आप इस तरह चाहते सहित एक गैर क्लस्टर सूचकांक का उपयोग करना चाहिए:

create index IX_MyBigTable on MyBigTable(keyColumn) include (col1, col2, col3youneed); 

यह सुंदर कुशल हो जाएगा।

+0

एक बी-पेड़ का पता लगाने शायद हैश मूल्य उत्पन्न करने से बहुत कम कुशल नहीं है, और कारण SQL सर्वर में क्लस्टर्ड इंडेक्स इतने महत्वपूर्ण हैं कि डेटा पंक्तियों को पत्ती के स्तर पर संग्रहीत किया जाता है। तो पढ़ा जो आपकी इंडेक्स कुंजी के लिए बी-पेड़ के पत्ते को हिट करता है, उस कुंजी के लिए डेटा पंक्ति भी पढ़ता है – Rick

+0

यह उत्तर सही है। मध्यवर्ती सूचकांक स्तर छोटे और पूरी तरह से कैश किया जाएगा। असल में, किसी भी तालिका में पीके द्वारा प्राप्त किसी को भी एक आईओ की आवश्यकता होगी। ऑन-डिस्क हैश-टेबल का उपयोग करने के विपरीत आपको मुख्य इलाके से भी फायदा होगा। – usr

+0

यादृच्छिक सुझाव - यदि आप वास्तव में हैं, वास्तव में, 100% केवल कुंजी-मूल्य लुकअप कर रहे हैं, और किसी भी प्रकार के संबंधपरक प्रश्न कभी नहीं, शायद एसक्यूएल आपका उत्तर नहीं है? रेडिस देखें - यह समझ में नहीं आता है कि यह तेजी से, लेन-देनशील, सुसंगत, डिस्क पर लगातार, स्थापित करने में आसान है - ऐसा लगता है जैसे यह बेहतर फिट हो सकता है। http://redis.io –

0

मेरे मानक के मुताबिक, कुंजी के लिए हैश कॉलम बनाना सबसे अच्छा तरीका है। Details

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