0
我將照片存儲在列表cql3列中。我可以從cql3輕鬆查詢列表,但我也需要了解Cassandra存儲模型如何處理列表以便能夠使用JMX bulkLoad服務將我的數據存入Cassandra。如果我插入一些測試數據像這樣的列表:Cassandra列名列名
insert into dat.lgr (id, photos) values (0, [0xaa, 0xbb]);
產生的數據,當與CLI查詢看起來是這樣的:
=> (column=photos:2fce75c0fe9811e2ab248b7126053a99, value=aa, timestamp=1375794036508000)
=> (column=photos:2fce75c1fe9811e2ab248b7126053a99, value=bb, timestamp=1375794036508000)
所以它看起來像Cassandra是實際存儲爲列列表中的每個元素由複合列名稱標識,包括集合名稱和未知的十六進制數字。該數字可能是一個64位散列,或兩個32位散列附加在一起。但是什麼是散列?我查看了源代碼,但沒有發現任何東西。任何幫助讚賞。
是的,他們是時間UUID的,謝謝。 ://github.com/apache/cassandra/blob/cassandra-1.2/src/java/org/apache/cassandra/cql3/Lists.java,所以我有一些體面的工作。但是,由於比較我的cf只是UTF8,當我嘗試添加比較UTF8的列時,我從AbstractSSTableSimpleWriter中得到錯誤:TimeUUID。任何想法? –
@axle_h我想說只有一個二進制比較器才能工作。順便說一句,這個問題可能是你感興趣的:http://stackoverflow.com/questions/18071334/selecting-index-from-cassandra-list-collection。基本上,如果您使用列表,您將無法從中只選擇一個項目。我認爲,最好使用一些明確的照片ID作爲主鍵的一部分(它可能仍然是TimeUUID)。它將允許按其ID來選擇,更新或刪除任何項目。 – Wildfire
沒關係,我已經整理過了。使用二進制比較器。謝謝你的幫助。對於嘗試對非複合行鍵使用複合類型也有一個完全不相關的問題。 –