इस तथ्य को ध्यान में रखते हुए कि एचबीएस प्रत्येक स्तंभ परिवार को एक अलग एचएफआईएल में संग्रहीत करता है और तथ्य यह है कि एक पंक्ति कई कॉलम परिवारों को फैल सकती है। एचबीएएस कैसे सुनिश्चित करता है कि एक पंक्ति पर एक पुट/डिलीट ऑपरेशन जो एकाधिक कॉलम परिवारों को फैलाता है वास्तव में परमाणु है?एचबीएएस पंक्ति स्तर परमाणुता की गारंटी कैसे देता है?
उत्तर
सभी एक पंक्ति पर लिखते हैं, इससे कोई फर्क नहीं पड़ता कि उस पंक्ति में कितने कॉलम परिवार हो सकते हैं, एक क्षेत्ररक्षक पर जाएं, और उस क्षेत्ररक्षक तब क्षेत्रों को वाल (होलॉग) में संपादित लिखते हैं, फिर लिखने सिंक किए जाते हैं , तो डेटा को मेमस्टोर में जोड़ा जाता है ताकि इसे परोसा जा सके। फिर - एक बार मेमस्टोर ने अपनी सीमा को मारा है - मेमस्टोर डिस्क पर फिसल जाएगा। यदि क्षेत्ररक्षक को कोई समस्या आती है और यह दुर्घटनाग्रस्त हो जाता है/मर जाता है/प्लग को खींच लिया जाता है तो डब्ल्यूएएल को सबकुछ सुसंगत रखने के लिए चलाया जा सकता है। अधिक गोरियों के विवरण के लिए HBASE-2283 और Hbase Architecture 101 देखें।
लिंक के लिए धन्यवाद। मुझे वास्तव में दिलचस्पी थी कि कैसे HBase सुनिश्चित करता है कि सभी HFiles को लिखें (यदि एकाधिक कॉलम परिवार को पुट/डिलीट कॉल के लिए स्पर्श किया गया है तो कई एचएफआईल्स शामिल होंगे) परमाणु रूप से होता है। लेकिन जैसा कि आपने उल्लेख किया है, चूंकि उस अद्यतन को अभी भी डब्ल्यूएएल से पुनर्प्राप्त किया जा सकता है, एचबीएस अपने ग्राहकों के लिए परमाणु की गारंटी दे सकता है। –
बिल्कुल - WAL का उपयोग अन्य चीजों के साथ, एकाधिक hfile समस्या के आसपास होने के लिए किया जाता है। – cftarnas
एचबीएस वर्तमान में सभी कॉलम परिवारों को एक ही समय में फ़्लश करके एकाधिक एचएफआईल्स लिखने के बावजूद पंक्ति-स्तर परमाणुता प्राप्त करता है। फ्लश तब ट्रिगर होता है जब सबसे बड़ा कॉलम परिवार कॉन्फ़िगर किए गए फ्लश आकार तक पहुंच जाता है। एक अतिरिक्त मेमस्टोर-स्तरीय टाइमस्टैंप है जो मेमस्टोर पढ़ने के लिए बहु-संस्करण समवर्ती नियंत्रण करने की अनुमति देता है, लेकिन यह HFiles पर लिखे गए कुंजी/मानों के लिए मौजूद नहीं है। प्रति कॉलम-पारिवारिक फ्लश (दक्षता में सुधार के लिए एक वांछनीय विशेषता) पर स्विच करने के लिए फ़ाइल स्वरूप में भी एक समान टाइमस्टैम्प जोड़ा जाना आवश्यक होगा।
जहां तक मुझे पता है, किसी भी पंक्ति संचालन (जैसे पुट/डिलीट/चेक एंडपूट) के लिए ऑपरेशन ऑर्डर संलग्न है -> सिंक -> मेमस्टोर। और प्रत्येक KeyValue में एक टाइमस्टैम्प भी है, जिसमें आप कॉलम परिवार के अंदर KeyValue जोड़े के कई संस्करणों को स्टोर कर सकते हैं (कॉलम परिवार के संस्करण द्वारा निर्धारित)। आप यह सुनिश्चित करने के लिए एक रोलॉक का भी उपयोग कर सकते हैं कि ऑपरेशन पूरी तरह से सुरक्षित है। – frail