2009-11-20 15 views
6

तो मैं यहां देखता हूं कि कैसंड्रा में स्वत: लोड संतुलन नहीं है, जो आदेशित विभाजनकर्ता का उपयोग करते समय देखा जाता है (पंक्तियों के समूह के मूल्यों की एक निश्चित सामान्य सीमा अपेक्षाकृत कुछ मशीनों पर संग्रहीत की जाएगी जो तब अधिकांश की सेवा करेंगे प्रश्न)।
What's The Best Practice In Designing A Cassandra Data Model?एक आदेशित विभाजनकर्ता के साथ कैसंद्रा लोड संतुलन?

मैं अभी भी कैसंद्रा के लिए नया हूं और यह कैसे काम करता है। इस मुद्दे से बचने के बारे में कोई कैसे जाएगा, ताकि सीमा प्रश्न अभी भी संभव हो? मुझे वास्तव में उपरोक्त उत्तरों (लिंक यूआरएल) विचार नहीं मिला है जो कि हैश को चाबियाँ जोड़ने के बारे में है।

+0

मुझे इस ब्लॉग http://blog.evanweaver.com/articles/2009/07/06/up-and-running-with-cassandra/ – deepblue

उत्तर

4

मुझे लगता है कि यह समस्या कैसंड्रा-उपयोगकर्ता मेलिंग सूची पर सबसे अच्छी तरह से ली गई है; वह जगह है जहां लोग हैं।

कैसंड्रा में स्वचालित लोड संतुलन अभी तक नहीं है लेकिन यह बहुत दूर-दूर के भविष्य में ऐसा कर सकता है। 0.5 शाखा अब इस में सक्षम हो सकती है।

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

हालांकि, आपकी चाबियाँ समय के साथ बदल सकती हैं (विशेष रूप से यदि वे समय-आधारित हैं) ताकि आप एक कामकाज चाहें।

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

मैं कुंजी का हिस्सा उल्लेख करने के लिए शब्द "विभाजन" यहाँ का उपयोग करेंगे आप अगर आप किसी दिए गए विभाजन के भीतर कुंजी स्कैन लेकर करना चाहते लेकर स्कैन

function makeWholeKey(partition, key) { 
    return concat(make_hash(partition), partition, key); 
} 

अब नहीं करना चाहते , आप makeWholeKey (पी, स्टार्ट) और makeWholeKey (पी, एंड)

के बीच स्कैन रेंज कर सकते हैं लेकिन यदि आप विभाजन को स्कैन करना चाहते हैं, तो आप भाग्य से बाहर हैं।

लेकिन आप अपने नोड्स को टोकन बना सकते हैं जो मेक_शैश() आउटपुट की सीमा के आसपास समान रूप से वितरित किए जाते हैं, और आपको समान रूप से वितरित डेटा मिल जाएगा (मान लें कि आपके पास एनओयूजीई विभाजन हैं जो यह सभी एक पर नहीं बढ़ते हैं या दो हैश मान)

8

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

यह cassandra.yaml में में क्लस्टर भर में डेटा partitioner पैरामीटर द्वारा नियंत्रित किया जाता का http://wiki.apache.org/cassandra/Operations

+0

पर 'संलग्न हैश टू चाब' विचार पर अधिक जानकारी मिली है। लिंक अब और काम नहीं कर रहा है। यह हमें एक पृष्ठ पर भेजता है जिसमें कहा गया है कि दस्तावेज़ीकरण स्थानांतरित हो गया था और वह गंतव्य हमें दस्तावेज़ीकरण की जड़ पर ले जाता है ... साथ ही, मुझे समझ में नहीं आता कि आप क्या मतलब है * «लोड नोडल को नोड बताएं» *। मुझे किसी को कुछ भी बताना क्यों होगा ?! साथ ही, यह स्पष्ट नहीं है कि आप एक व्यस्त जगह पर क्यों जाना चाहते हैं, लोड संतुलन आमतौर पर दूसरी तरफ है। शायद आप स्पष्टीकरण देने की कोशिश कर सकते हैं? –

1

विभाजन कवर किया जाता है:

partitioner: org.apache.cassandra.dht.Murmur3Partitioner 

Murmur3Partitioner का उपयोग पंक्ति कुंजी के लिए यादृच्छिक hashCode पैदा करते हैं और लोड संतुलन प्रदर्शन करेंगे।

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

+0

ध्यान दें कि सवाल 200 9 में कैसंड्रा के समय के आसपास पूछ रहा था ... कहा जा रहा है कि, मैं सहमत हूं कि विभाजनकर्ता आमतौर पर कैसंड्रा क्लस्टर को संतुलित करने की अपेक्षा करता है। –

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