2012-01-18 25 views
13

का उपयोग कर कैसंड्रा में कंपोजिट टाइप प्रकार कॉलम का सामना करना पड़ रहा है जिस परिदृश्य का सामना कर रहा हूं उसका नमूना यहां दिया गया है।हेक्टर

create column family CompositeTypeCF 
    with comparator = 'CompositeType(IntegerType,UTF8Type)' 
    and key_validation_class = 'UTF8Type' 
    and default_validation_class = 'UTF8Type' 

कुछ नमूने यहां जावा हेक्टर का उपयोग कर कोड के रूप में कैसे मैं इस स्तंभ परिवार में कुछ डेटा सम्मिलित करने के बारे जाना चाहते करने के लिए: अगर

Cluster cluster = HFactory.getOrCreateCluster("Test Cluster", "192.168.1.6:9160"); 
Keyspace keyspaceOperator = HFactory.createKeyspace("CompositeTesting", cluster); 
Composite colKey1 = new Composite(); 
colKey1.addComponent(1, IntegerSerializer.get()); 
colKey1.addComponent("test1", StringSerializer.get()); 
Mutator<String> mutator = HFactory.createMutator(keyspaceOperator, StringSerializer.get()); 
Mutator<String> addInsertion = mutator.addInsertion("rowkey1", "CompositeTypeCF", 
    HFactory.createColumn(colKey1, "Some Data", new CompositeSerializer(), StringSerializer.get())); 
mutator.execute(); 

यह काम करता है, और मुझे लगता है मैं इस स्तंभ परिवार है कहो कैसेंड्रा-CLI के पास जाकर एक सूची मैं इस मिलता है:

$ list CompositeTypeCF; 

Using default limit of 100 
------------------- 
RowKey: rowkey1 
=> (column=1:test1, value=Some Data, timestamp=1326916937547000) 

मेरा प्रश्न अब यह है: मैं हेक्टर में इस डेटा से क्वेरी के बारे में कैसे जाते हैं? असल में मैं कुछ मायनों में यह क्वेरी करने के लिए की आवश्यकता होगी:

  1. मुझे पूरी पंक्ति दें जहां पंक्ति कुंजी = "rowkey1"
  2. मुझे स्तंभ डेटा दें जहां स्तंभ नाम के पहले भाग = कुछ पूर्णांक मान
  3. मुझे सभी स्तंभों दें जहां स्तंभ नाम का पहला हिस्सा एक निश्चित सीमा

उत्तर

13

अच्छा प्रारंभिक बिंदु ट्यूटोरियल here के भीतर है।

लेकिन, अंत में एक समग्र घटक का उपयोग करने और डेटा के खिलाफ प्रश्न लिखने का प्रयास करने के बाद, मुझे कुछ चीजें मिलीं जिन्हें मैं साझा करना चाहता था।

समग्र कॉलम खोजते समय, परिणाम कॉलम का एक संगत ब्लॉक होगा। करने के लिए बी ए: बी:

तो, 3 तार की समग्र रूप में यह सोचते हैं, और मेरे कॉलम की तरह लग रहे: एक: से एक एक खोज के लिए

A:A:A 
A:B:B 
A:B:C 
A:C:B 
B:A:A 
B:B:A 
B:B:B 
C:A:B 

बी, परिणाम हो जाएगा

A:A:A 
A:B:B 
A:B:C 
A:C:B 
B:A:A 
B:B:A 
B:B:B 

"सी" घटक नोटिस? प्रारंभ/समाप्ति शर्तों में कोई "सी" घटक नहीं हैं! क्या देता है? ये ए: ए: ए और बी: बी: बी कॉलम के बीच सभी परिणाम हैं। समग्र खोज शब्द परिणाम न दें जैसे कि नेस्टेड लूप (यह मूल रूप से सोचा गया है), लेकिन कॉलम सॉर्ट होने के बाद , आप एक संगत ब्लॉक के लिए प्रारंभ और समाप्ति शब्द निर्दिष्ट कर रहे हैं कॉलम

जब समग्र खोज प्रविष्टियों का निर्माण, आप ComponentEquality

चाहिए GREATER_THAN_EQUAL हो, अन्य सभी को बराबर होना चाहिए केवल पिछले अवधि निर्दिष्ट करना होगा। जैसे

Composite start = new Composite(); 
start.addComponent(0, "A", Composite.ComponentEquality.EQUAL); 
start.addComponent(1, "A", Composite.ComponentEquality.EQUAL); 
start.addComponent(2, "A", Composite.ComponentEquality.EQUAL); 

Composite end = new Composite(); 
end.addComponent(0, "B", Composite.ComponentEquality.EQUAL); 
end.addComponent(1, "B", Composite.ComponentEquality.EQUAL); 
end.addComponent(2, "B", Composite.ComponentEquality.GREATER_THAN_EQUAL); 

SliceQuery<String, Composite, String> sliceQuery = HFactory.createSliceQuery(keyspace, se, ce, se); 
sliceQuery.setColumnFamily("CF").setKey(myKey); 
ColumnSliceIterator<String, Composite, String> csIterator = new ColumnSliceIterator<String, Composite, String>(sliceQuery, start, end, false); 

while (csIterator.hasNext()) .... 
+1

क्या आप विस्तारित कर सकते हैं कि हमें अंतिम घटक में GREATER_THAN_EQUAL क्यों चाहिए? मैं लेख के माध्यम से चला गया, लेकिन चीजें अभी भी अस्पष्ट हैं। –

+0

मैंने इसे एक अलग प्रश्न के रूप में पूछा है ताकि मैं आपको अंक दे सकूं! –

+0

मुझे नहीं पता, मैंने स्वयं को यह समझाने के लिए कुछ नमूना कोड के साथ प्रयोग किया कि यह मेरी आवश्यकतानुसार काम करता है। – libjack