में अधिक कवर किया जाता है।
मैं सामाजिक खेलों के लिए पिछले 18 महीनों के लिए उत्पादन में कैसंद्रा का उपयोग कर रहा हूं।
मेरा हालांकि यह है कि आपको अपनी शक्तियों के लिए कैसंद्रा का उपयोग करना होगा।तो यह समझना आवश्यक है कि कौन सा डेटा मॉडल उपयोग करना है या यह भी पहचानना आवश्यक है कि कोई अन्य डीबी समाधान आपके लिए अधिक उपयोगी है या नहीं। स्वत: sharding और लोड संतुलन:
OrderedPartitioner ही अगर आपके आवेदन कुंजी रेंज प्रश्नों पर भरोसा करते हैं, लेकिन आप उस के लिए कैसेंड्रा के सबसे शक्तिशाली सुविधाओं में से एक पर छोड़ देना उपयोगी है। पंक्ति कुंजी रेंज क्वेरी के बजाय उसी पंक्ति में कॉलम नामों की श्रेणियों का उपयोग करके आपको वही कार्यक्षमता लागू करने का प्रयास करें। टीएल; डीआर पढ़ने/लिखने के लिए नोड्स के बीच संतुलित नहीं किया जाएगा।
RandomPartioner (md5 हैशिंग) और MurmurPartitioner (बड़बड़ाहट हैशिंग, बेहतर और तेज) रास्ता तय करना होगा कि आप बड़ा डेटा और एक उच्च पहुँच फ्रीक्वेंसियों को सपोर्ट करना चाहते हैं कर रहे हैं। एकमात्र चीज जिसे आप छोड़ देते हैं वह मुख्य श्रेणी प्रश्न है। सब कुछ जो एक ही पंक्ति में है, अभी भी क्लस्टर में एक ही नोड पर है और आप उन पर तुलनित्र और कॉलम नाम श्रेणी क्वेरी का उपयोग कर सकते हैं। टीएल; डीआर: प्रोपर बैलेंसिंग के लिए इसका उपयोग करें, आप कुछ भी प्रमुख नहीं छोड़ देंगे।
चीजें आप कैसेंड्रा के बारे में पता होना चाहिए:
कैसेंड्रा अंततः लगातार है। कैसंद्रा ने उच्च उपलब्धता और उत्कृष्ट विभाजन (http://en.wikipedia.org/wiki/CAP_theorem) के लिए संगठनात्मक व्यापार का चयन किया है। लेकिन आप कैसंद्रा से स्थिरता प्राप्त कर सकते हैं, जब आप इसे पढ़ते और लिखते हैं तो यह आपके बारे में संगठनात्मक नीति है। कैसंद्रा का उपयोग करने के बारे में बात करते समय यह एक महत्वपूर्ण और जटिल विषय है लेकिन आप इसके बारे में विस्तार से यहां http://www.datastax.com/docs/1.2/dml/data_consistency पढ़ सकते हैं।
अंगूठे के नियम के रूप में (और इसे सरल रखने के लिए) मैं QUORUM ConsistencyLevel पर पढ़ता हूं और लिखता हूं (क्योंकि मेरे ऐप्स में पढ़ने के रूप में आवृत्ति के समान क्रम के होते हैं)। यदि आपका ऐप भारी रूप से भारी लिखता है और पढ़ता है तो बहुत कम होता है तो एक पर लिखें और सभी को पढ़ें। या यदि आपका उपयोग केस विपरीत है (लिखने से बहुत कम बार लिखते हैं) तो आप एक पर पढ़ने की कोशिश कर सकते हैं और सभी पर लिख सकते हैं। लिखने के लिए एक स्थिरता स्तर के रूप में किसी का उपयोग करना एक अच्छा विचार नहीं है यदि आप स्थिरता को हल करने की कोशिश कर रहे हैं, क्योंकि यह गारंटी देता है कि उत्परिवर्तन क्लस्टर तक पहुंच गया है लेकिन यह नहीं कि यह कहीं भी लिखा गया है। यह एकमात्र मामला है जिसमें मैंने कैसंद्रा पर चुपचाप असफल होने के लिए लिखा है।
कैसंद्रा विकास के साथ शुरू करना आसान बनाने के लिए ये सरल नियम हैं। उत्पादन क्लस्टर से यथासंभव अधिक स्थिरता और प्रदर्शन प्राप्त करने के लिए आपको इस विषय का अध्ययन करना चाहिए और वास्तव में इसे स्वयं समझना चाहिए।
यदि आपको संस्थाओं (तालिकाओं) के बीच जटिल संबंधों के साथ मानव पठनीय डेटामैडल की आवश्यकता है तो मुझे नहीं लगता कि कैसंद्रा आपके लिए है। MySQL और शायद NewSQL आपके उपयोग के मामले के लिए और अधिक उपयोगी हो सकता है।
यह जानने के लिए एक अच्छी बात यह है कि, लगभग, कैसंड्रा डेटा बचाता है और पढ़ता है। जब भी आप लिखते हैं (हटाते हैं वास्तव में कैसंड्रा में "टॉम्बस्टोन" मान के लिखते हैं) सिस्टम नए मूल्य और उसके समय के नए भौतिक स्थान में टिकट लगाएगा।
जब आप पढ़ते हैं, तो कैसंड्रा सभी लिखने को एक निश्चित कुंजी/कॉलम_नाम स्थान के लिए खींचने की कोशिश करता है और आपको वह सबसे हालिया समय देता है जो वह पा सकता है (जो क्लाइंट द्वारा दिया गया उच्चतम टाइमस्टैम्प वाला है)। तो एक नोड द्वारा आवश्यक स्मृति सीधे लिखने की आवृत्तियों पर निर्भर है। कैसंद्रा में एक कॉम्पैक्शन प्रक्रिया है जो पुराने उत्परिवर्तनों की सफाई का ख्याल रखती है। कैसंद्रा में एक आंतरिक कैश होता है जिसे स्थान के नवीनतम मूल्य के साथ पढ़ने पर अपडेट किया जाता है।
एसएसटीबल्स की डिस्क पर विलय/संयोजन (डेटा को बनाए रखने वाले डेटा संरचनाओं) को पढ़कर उत्तेजित किया जा सकता है, लेकिन इससे बेहतर नहीं है। कबूतरों और कालबाह्य कॉलम की सफाई (समय-प्रति-लाइव कार्यक्षमता का उपयोग) कचरा कलेक्टर द्वारा प्रबंधित एक अलग तंत्र है (अधिक जानकारी के लिए जीसी अनुग्रह समय सेटिंग देखें)।
यह मुझे अंतिम बिंदु पर लाता है जो मैं बनाना चाहता हूं: सुनिश्चित करें कि आपके लिखने और पढ़ने को आपके समूह में संतुलित किया जाएगा!
मान लीजिए कि आपके सभी उपयोगकर्ताओं को अक्सर एक ही स्थान को अपडेट करने की आवश्यकता है।
सैद्धांतिक एकल स्थान केवल एक पंक्ति कुंजी के लिए मानचित्र न करें! यह आपके सभी लेखन आपके क्लस्टर में केवल एक नोड पर गिर जाएगा। यदि यह सबकुछ नीचे नहीं लाता है (क्योंकि आपके पास रॉकस्टार सिसोप्स हैं) तो यह कम से कम क्लस्टर के प्रदर्शन को अपंग करेगा।
मेरी सलाह है कि आप अपने लेखन को पर्याप्त अलग-अलग पंक्ति कुंजी में बाल्टी करें ताकि आप क्लस्टर में सभी नोड्स में अपने लेखन वितरित कर सकें। उस एकल सैद्धांतिक स्थान के लिए सभी डेटा पुनर्प्राप्त करने के लिए सभी "उप पंक्ति कुंजी" पर एक बहु_get का उपयोग करें।
उदाहरण:
मैं सभी सक्रिय http सत्र (जो उन्हें सौंपे गए UUID) की एक सूची है करना चाहते हैं। सभी को "सत्र" पंक्ति कुंजी में सेव न करें। 6 नोड्स के मेरे कैसंड्रा क्लस्टर के लिए मैं पंक्ति कुंजी के रूप में उपयोग करता हूं: _ सत्र। फिर मेरे पास सभी सक्रिय सत्रों को पुनर्प्राप्त करने के लिए एक छोटी 16 कुंजी mult_get है, या मैं अभी भी बता सकता हूं कि एक साधारण प्राप्त करने के जरिए कोई सत्र सक्रिय है (यदि मैं निश्चित रूप से इसके बारे में जानता हूं)। यदि आपका क्लस्टर बहुत बड़ा है तो आप पीढ़ी की बाल्टी कुंजी के लिए हैश फ़ंक्शन का उपयोग करना चाहेंगे।
मैं आपको कैसंद्रा में डेटा मॉडलिंग के बारे में अधिक जानकारी प्राप्त करने का सुझाव देता हूं। मैंने http://www.cs.wayne.edu/andrey/papers/TR-BIGDATA-05-2015-CKL.pdf और http://www.datastax.com/dev/blog/basic-rules- पढ़ा है इस मामले में उपयोगी लेख के रूप में ऑफ-कैसंड्रा-डेटा-मॉडलिंग। वे आपकी क्वेरी (क्वेरी-संचालित पद्धति) और डेटा डुप्लिकेशन और इसके फायदे/नुकसान के आधार पर टेबल मॉडलिंग के बारे में समझने में आपकी सहायता करेंगे। – Elnaz