2012-08-11 5 views
23

मैंने नवीनतम रिलीज में पढ़ा है कि "प्रदर्शन मुद्दे" के कारण सुपर कॉलम वांछनीय नहीं हैं, लेकिन यह कहां समझाया गया है।कैसंद्रा में सुपर कॉलम अब पसंदीदा क्यों नहीं हैं?

फिर मैंने this one जैसे लेख पढ़े जो सुपर कॉलम का उपयोग करके अद्भुत अनुक्रमण पैटर्न प्रदान करते हैं।

यह मुझे वर्तमान में कैसंड्रा में अनुक्रमण करने का सबसे अच्छा तरीका है, इस बारे में कोई जानकारी नहीं है।

  1. सुपर कॉलम के प्रदर्शन मुद्दे क्या हैं?
  2. मुझे वर्तमान अनुक्रमण के लिए सर्वोत्तम अभ्यास कहां मिल सकता है?
+2

यह एक उत्कृष्ट सवाल है। मुझे लगता है कि इस eBay तकनीक ब्लॉग में एक अनुकूलित और कम तकनीक (कोई तकनीकी विवरण नहीं है) एक अनुकूलित वास्तुकला का अवलोकन है। http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/ हालांकि, यदि आप वास्तविक सामान में हैं, तो प्रत्येक चेंजलॉग और रोडमैप को बेहतर ढंग से पढ़ें ताकि आपको एक बेहतर महसूस करें कि समस्याएं कहां और क्या हैं और उन्हें कैसे हल किया जा रहा है। यह बहुत अधिक पढ़ रहा है और यह अच्छा होगा अगर इसे कहीं व्यवस्थित किया जा सके, लेकिन मुझे इंटरनेट पर भी ज्यादा नहीं मिल रहा है। –

उत्तर

31

सुपर कॉलम कई समस्याओं से पीड़ित हैं, जिनमें से कम से कम यह नहीं है कि कैसंड्रा के लिए पूछताछ के दौरान सुपर कॉलम के सभी सब-कॉलम को विलुप्त करना आवश्यक है (भले ही परिणाम केवल एक छोटा सा लौटाए सबसेट)। नतीजतन, प्रति सुपर कॉलम प्रति उप-कॉलम की संख्या के लिए व्यावहारिक सीमा है जिसे प्रदर्शन से पहले संग्रहीत किया जा सकता है।

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

समग्र स्तंभों का उपयोग करने का सबसे आसान तरीका है CQL 3 प्रदान करता है कि अमूर्तता का लाभ लेना है। निम्न स्कीमा पर विचार करें:

CREATE TABLE messages(
    username text, 
    sent_at timestamp, 
    message text, 
    sender text, 
    PRIMARY KEY(username, sent_at) 
); 

प्रयोक्ता नाम यहाँ पंक्ति कुंजी है, लेकिन हम प्राथमिक कुंजी परिभाषा जो पंक्ति कुंजी और sent_at स्तंभ का एक समूह बनाता है का उपयोग किया है। यह महत्वपूर्ण है क्योंकि इसमें उस विशेषता को अनुक्रमणित करने का प्रभाव है।

alice: (2012-08-01 11:42:37,message): Hi yourself, (2012-08-01 11:42:37,sender): bob 
bob: (2012-08-01 11:42:15,message): Hi,   (2012-08-01 11:42:15,sender): alice, (2012-08-01 11:43:00,message): What are you doing later?, (2012-08-01 11:43:00,sender): alice (2012-08-01 11:47:14,message): Bob?, (2012-08-01 11:47:14,sender): alice 

लेकिन CQL 3 का उपयोग, हम "पंक्ति" एक sent_at विधेय का उपयोग कर क्वेरी कर सकता है, और एक सारणीबद्ध वापस पाने:

INSERT INTO messages (username, sent_at, message, sender) VALUES ('bob', '2012-08-01 11:42:15', 'Hi', 'alice'); 
INSERT INTO messages (username, sent_at, message, sender) VALUES ('alice', '2012-08-01 11:42:37', 'Hi yourself', 'bob'); 
INSERT INTO messages (username, sent_at, message, sender) VALUES ('bob', '2012-08-01 11:43:00', 'What are you doing later?', 'alice'); 
INSERT INTO messages (username, sent_at, message, sender) VALUES ('bob', '2012-08-01 11:47:14', 'Bob?', 'alice'); 
दृश्यों कैसेंड्रा इस तरह के ऊपर सम्मिलित डेटा कुछ स्टोर करेगा पीछे

परिणाम सेट।

SELECT * FROM messages WHERE username = 'bob' AND sent_at > '2012-08-01'; 
username | sent_at     | message     | sender 
----------+--------------------------+---------------------------+-------- 
     bob | 2012-08-01 11:43:00+0000 | What are you doing later? | alice 
     bob | 2012-08-01 11:47:14+0000 |      Bob? | alice 
+0

धन्यवाद! समग्र कुंजी की बात करते हुए, कैसंद्रा प्रत्येक कॉलम पर रेंज पूछताछ करने में सक्षम है? चुनें * कहीं से जहां एक> 3 और एक <= 12 और बी आईएन (1, 3, 6) और सी> 17 आदि, मानते हैं कि कुंजी ए, बी, सी है। – IamIC

+0

या इस मामले के लिए एक समग्र कॉलम नाम (बहु-घटक) बेहतर है? – IamIC

+0

क्या आप इसे देख सकते हैं: http://stackoverflow.com/questions/11978386/cassandra-1-1- स्टोरेज-engine – IamIC

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