2012-05-08 42 views
5

Tôi hiện đang cố gắng để có được đầu của tôi quấn quanh Cassandra/tiết kiệm với Erlang ...Cassandra tiết kiệm Erlang chèn

Tôi có một gia đình Cột có tên là "mq" (như trong hàng đợi thông điệp) ...

Tôi muốn có một hàng cho mỗi người dùng (với user_id), mỗi thông báo sẽ là cột mới có dấu thời gian cho tên và thông báo làm giá trị.

Dưới đây là trong Cassandra-cli gì tôi đang làm:

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'; 

Tất cả mọi thứ hoạt động tốt với Cassandra-cli

Tuy nhiên, Khi tôi đang cố gắng để chèn từ Erlang, tôi chạy vào một số vấn đề:

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 
        ] 
        ). 

Dưới đây là các lỗi:

{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]}}} 

Bất kỳ trợ giúp sẽ được đánh giá cao ...

EDIT 1:

Tôi đã phát hiện ra rằng nó nên được (vì nó làm việc cho người khác):

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

Đây là thông báo lỗi có liên quan:

** 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) 

Trả lời

1

Ok tôi đã phát hiện ra là những gì vấn đề, hoặc các vấn đề là đúng ...

Dưới đây là mã của tôi để kết nối và chèn ...

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]). 

Trong thực tế chúng ta nên chèn vào the thrift_client mới mà 'set_keyspace' trả về ... rõ ràng cho mỗi cuộc gọi được thực hiện thông qua tiết kiệm một thrift_client mới được tạo ra và nên được sử dụng.

Hơn nữa, chúng ta nên sử dụng columnParent thay vì columnPath (không chắc chắn lý do tại sao, nó chỉ hoạt động). Và dấu thời gian trong # cột là bắt buộc ...

Tôi hy vọng điều này sẽ giúp người khác.

0

Tôi khuyên bạn nên kiểm tra https://github.com/ostinelli/erlcassa i nstead tái phát minh ra bánh xe vật lộn.

+0

Xin chào và cảm ơn câu trả lời của bạn. Tôi đã nhận thức được erlcassa, đang sử dụng CQL. Thật không may CQL ngày nay không phù hợp với nhu cầu của tôi, nó là khá hạn chế tại thời điểm chúng tôi đang nói chuyện. Ví dụ: có vẻ như không chèn các cột chưa được mô tả trong siêu dữ liệu gia đình cột. Vì vậy, mô hình dữ liệu của tôi sẽ chèn một cột mới cho mỗi hàng cho mỗi tin nhắn là không khả thi với CQL. – TheSquad

Các vấn đề liên quan