एक SSTable क्या है?


जवाबों:


105

सॉर्ट की गई स्ट्रिंग्स टेबल (गूगल से उधार ली गई) कुंजी / मान स्ट्रिंग जोड़े की एक फाइल है, जो कुंजी द्वारा क्रमबद्ध है


4
अभी तक एक और उत्कृष्ट SO कैसंड्रा उत्तर के लिए धन्यवाद! BTW, क्या आपने इस प्रश्न को देखा है: stackoverflow.com/questions/2573106/…
knorv

क्या यह आमतौर पर अपरिवर्तनीय है?
डीन जे जूल

1
हाँ, डिज़ाइन द्वारा अस्थिरताएँ अपरिवर्तनीय हैं - जो कि एक भयानक विशेषता है
Schildmeijer

फिर दोनों को कैसे छाँटा जा सकता है?
xjcl

56

"एक SSTable मानों की कुंजियों से एक स्थायी, क्रमबद्ध अपरिवर्तनीय मानचित्र प्रदान करता है, जहाँ कुंजियाँ और मान दोनों मनमाने ढंग से तार होते हैं। एक निर्दिष्ट कुंजी के साथ जुड़े मूल्य को देखने के लिए संचालन प्रदान किए जाते हैं, और सभी कुंजी / मान युग्मों पर पुनरावृत्ति करने के लिए प्रदान किए जाते हैं। निर्दिष्ट कुंजी सीमा। आंतरिक रूप से, प्रत्येक SSTable में ब्लॉक का एक क्रम होता है (आमतौर पर प्रत्येक ब्लॉक आकार में 64KB होता है, लेकिन यह कॉन्फ़िगर करने योग्य होता है।) ब्लॉक का पता लगाने के लिए एक ब्लॉक इंडेक्स (SSTable के अंत में संग्रहीत) का उपयोग किया जाता है; सूचकांक लोड किया जाता है। स्मृति में जब SSTable खोला जाता है। एक लुकअप एकल डिस्क की तलाश के साथ किया जा सकता है: हम पहली बार इन-मेमोरी इंडेक्स में एक बाइनरी खोज करके उपयुक्त ब्लॉक पाते हैं, और फिर डिस्क से उपयुक्त ब्लॉक को पढ़ते हैं। वैकल्पिक रूप से, एक SSTable। पूरी तरह से स्मृति में मैप किया जा सकता है, जो हमें डिस्क को छूने के बिना लुकअप और स्कैन करने की अनुमति देता है।"


4
"डिस्क को छुए बिना" -> "बिना यह जाने कि डिस्क को छुआ जा रहा है"। मेमोरी मैप्ड IO एक बहुत ही उपयोगी तकनीक है क्योंकि यह OS को वास्तविक IO को दर्शाता है, यह मानते हुए कि यह कैशिंग में एक अच्छा काम कर सकता है (विशेषकर जब कई प्रक्रियाएं एक ही फ़ाइल को साझा करती हैं)। लेकिन इसका नुकसान यह है कि आपके पास इसका नियंत्रण नहीं है। यदि पृष्ठ स्मृति में निवासी नहीं है, तो थ्रेड ब्लॉक हो जाएगा और अन्य ऑपरेशन नहीं कर सकता है; इसके विपरीत "async IO", जहाँ आप कॉलबैक को पंजीकृत कर सकते हैं और उसी थ्रेड में अन्य सामान कर सकते हैं, जबकि IO लंबित है।
.थकुइल

2
@ithkuil: आप पूरी तरह से मेमोरी मैप्ड IO का नियंत्रण कर सकते हैं, कम से कम यह आश्वासन देने में सक्षम होने के लिए कि कुछ पेज मेमोरी में हैं या डिस्क के लिए प्रतिबद्ध हैं (अभी भी उन पृष्ठों के लिए जगह है जो उन पृष्ठों की गारंटी नहीं हैं जिनमें होने की गारंटी नहीं है स्मृति लेकिन बहुत अच्छी तरह से हो सकता है)। यही चमत्कार (), msync (), और MAP_LOCKED जैसी चमत्कारिक चीजें हैं। आप यह भी समझ सकते हैं कि वर्तमान में क्या है और mincore () के माध्यम से पृष्ठांकित नहीं है।
क्रिस्टोफर स्मिथ

2
@ क्रिस्टोफरस्मिथ: हाँ आप सही हैं, इसे नियंत्रित करने के तरीके हैं। हालाँकि, आमतौर पर इसका उपयोग महत्वपूर्ण प्रदर्शन अनुभागों (रीयलटाइम) या सुरक्षा संबंधी समस्याओं (जैसे कि इन-मेमोरी पासवर्ड डिस्क पर स्वैप हो जाता है) से बचने के लिए किया जाता है। मेमोरी मैप की गई फाइलें इस तथ्य के कारण बहुत उपयोगी हैं कि आपको यह तय नहीं करना है कि उनमें से कितनी मेमोरी में रखना है; अन्यथा आप बिना mmap के पूरी फ़ाइल को केवल मेमोरी में पढ़ सकते हैं और समान प्रभाव प्राप्त कर सकते हैं। वास्तव में, मैं बस कैसंड्रा कोड के माध्यम से पकड़ लिया; mlockall(MCL_CURRENT);स्टार्टअप पर एकमात्र कॉल किया जाता है। यह भी देखें: goo.gl/AEgPM
ithkuil


4

एक टैबलेट SSTables के रूप में संग्रहीत किया जाता है।

SSTable (सीधे GFS में मैप किया गया) कुंजी-मूल्य आधारित अपरिवर्तनीय संग्रहण है। यह डेटा का हिस्सा रखता है, प्रत्येक 64KB का है।

परिभाषाएं:

  • कुंजी का सूचकांक: कुंजी और प्रारंभिक स्थान
  • चंक जीएफएस में एक भंडारण इकाई है, प्रतिकृति प्रबंधन चंक द्वारा है

3
  • SSTable (engl। सॉर्टेड स्ट्रिंग्स टेबल) कुंजी / मान स्ट्रिंग जोड़े की एक फ़ाइल है, जो कीज़ द्वारा सॉर्ट की जाती है।

  • एक SSTable कुंजियों से मूल्यों के लिए एक निरंतर, क्रमबद्ध अपरिवर्तनीय मानचित्र प्रदान करता है, जहां कुंजियाँ और मान दोनों बाइट स्ट्रिंग हैं।

  • आंतरिक रूप से, प्रत्येक SSTable में ब्लॉक का क्रम होता है (आमतौर पर
    प्रत्येक ब्लॉक आकार में 64KB होता है, लेकिन यह कॉन्फ़िगर करने योग्य होता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.