2012-05-08 16 views
5

मैं वर्तमान में प्राप्त करने के लिए मेरे सिर कैसेंड्रा/Erlang के साथ बचत लपेट कोशिश कर रहा हूँ ...कैसेंड्रा बचत Erlang सम्मिलित

मैं (संदेश कतार के रूप में) एक स्तंभ परिवार "MQ" नाम है ...

मैं प्रति उपयोगकर्ता एक पंक्ति (उपयोगकर्ता_आईडी के साथ) रखना चाहता हूं, प्रत्येक संदेश नाम के लिए टाइमस्टैम्प के साथ एक नया कॉलम होगा और संदेश के रूप में संदेश होगा।

यहाँ मैं क्या कर रहा कैसेंड्रा-CLI में बताया गया है:

create keyspace my_keyspace; 
use my_keyspace; 
create column family mq with comparator=UTF8Type and key_validation_class=UTF8Type; 

%% Adding to user_id (00000001) the message "Hello World!" 
set mq['00000001']['1336499385041308'] = 'Hello Wold'; 

सब कुछ कैसेंड्रा-CLI के साथ अच्छा काम करता है

हालांकि, जब मैं, Erlang से सम्मिलित करने के लिए कोशिश कर रहा हूँ मैं में चल रहा हूँ कुछ मुद्दा:

{error,{bad_args,insert, 
       ["00000001", 
       #columnPath{column_family = "mq",super_column = undefined, 
          column = undefined}, 
       #column{name = "1336499385041308",value = "Hello World!", 
         timestamp = undefined,ttl = undefined},1]}}} 
:

1>rr(cassandra_types). 
2>{ok, C}=thrift_client_util:new("localhost", 9160, cassandra_thrift,[{framed, true}]). 
3>thrift_client:call(C, 'set_keyspace', ["peeem"]). 
4>thrift_client:call(C,'insert',["00000001", 
        #columnPath{column_family="mq"}, 
        #column{name="1336499385041308", value="Hello World!"}, 
        1 
        ] 
        ). 

यहाँ त्रुटि है

किसी भी मदद की सराहना की है ...

संपादित करें 1:

मुझे पता चला है कि यह होना चाहिए (क्योंकि यह किसी और के लिए काम करता है):

thrift_client:call(C,'insert', ["00000001", #columnParent{column_family="mq"}, #column{name="123456",value="Hello World!"}, 2]). 

यहाँ संबंधित त्रुटि संदेश:

** exception error: no match of right hand side value {{protocol,thrift_binary_protocol, 
                   {binary_protocol,{transport,thrift_framed_transport, 
                          {framed_transport,{transport,thrift_socket_transport, 
                                  {data,#Port<0.730>,infinity}}, 
                               [],[]}}, 
                        true,true}}, 
                 {error,closed}} 
    in function thrift_client:send_function_call/3 (src/thrift_client.erl, line 83) 
    in call from thrift_client:call/3 (src/thrift_client.erl, line 40) 

उत्तर

1

ठीक है मुझे पता चला है मुद्दा था, या मुद्दों सही होने के लिए क्या ...

यहाँ मेरी कोड आदेश से कनेक्ट करने और सम्मिलित करने के लिए में है ...

rr(cassandra_types). 
{ok, C}=thrift_client_util:new("localhost", 9160, cassandra_thrift,[{framed, true}]). 
{C1, _} = thrift_client:call(C, 'set_keyspace', ["my_keyspace"]). 
thrift_client:call(C1,'insert', ["00000001", #columnParent{column_family="mq"}, #column{name="1234567",value="Hello World !", timestamp=0}, 2]). 

वास्तव में हम डालूँ नए thrift_client में 'set_keyspace' रिटर्न ... स्पष्ट रूप से बहाव के माध्यम से किए गए प्रत्येक कॉल के लिए एक नया Thrift_client उत्पन्न होता है और इसका उपयोग किया जाना चाहिए।

और भी, हमें कॉलमपैथ के बजाय कॉलम पेरेंट का उपयोग करना चाहिए (सुनिश्चित नहीं है कि यह अभी तक क्यों काम करता है)। और #column में टाइमस्टैम्प अनिवार्य है ...

मुझे उम्मीद है कि यह किसी और की मदद करेगा।

0

मैं https://github.com/ostinelli/erlcassa की जांच करने की सलाह देता हूं I थ्रिफ्ट-कुश्ती पहिया को पुनर्निर्मित करने का nstead।

+0

हाय, और आपके उत्तर के लिए धन्यवाद। मैं पहले से ही erlcassa के बारे में पता है, जो सीक्यूएल का उपयोग कर रहा है। दुर्भाग्यवश आज सीक्यूएल मेरी ज़रूरत के अनुरूप नहीं है, जब हम बात कर रहे हैं तो यह काफी सीमित है। उदाहरण के लिए, ऐसा लगता है कि कॉलम परिवार मेटाडेटा में वर्णित स्तंभों को सम्मिलित नहीं किया गया है। तो मेरा डेटा मॉडल जो प्रत्येक संदेश के लिए प्रति पंक्ति एक नया कॉलम डालेगा, वह सीक्यूएल के साथ व्यवहार्य नहीं है। – TheSquad