2013-07-21 35 views
3

我有一個問題,關於如何可以通過CQLEngine在Cassandra中創建無價值列。我的意思是我想在某些目的的列名稱而不是列值的商店信息。 但是在CqlEngine中,您應該在模型文件中運行項目之前定義列名稱。 感謝您的幫助。如何創建無價值列在卡桑德拉通過CQLEngine

+0

Django不支持卡桑德拉,我想。但我可能是錯的。 –

+0

謝謝Mr. Brainiac,Django支持cassandra的驅動程序:pycassa和cqlengine。他們也很強大。你可以在谷歌上搜索它 –

+0

不,我的意思是你沒有像Django那樣使用postgres或mysql給你的現成模型。 –

回答

0

傳統上,使用Thrift api和寬行來定義自己的列名稱可以實現您的問題。這不是CQL3的工作原理。如果你想以這種方式工作,你可以使用pycassa,或者你可以使用複合鍵創建列。

例如,CQL3:

create table ratings (user_id uuid, item_id uuid, rating int, primary key (user_id, item_id));

你會真正創建一個寬行,與USER_ID爲重點,列將有ITEM_ID和評價將是值。使用複合主鍵,行被轉換爲列。

您可能需要閱讀此:http://brianoneill.blogspot.com/2012/09/composite-keys-connecting-dots-between.html

+1

感謝您的幫助。這篇文章非常有用,但讓我問你,這意味着在CQL3中不可能由程序員定義一個列名?在你的例子中,列名由兩個UUID字段定義,這兩個UUID字段將由系統自動生成,所以當我不知道列名時,如何進行分片查詢(查詢某個列,例如comment0到comment999)? –

+0

我找到了它。我可以通過在我的CF中創建兩個主鍵或更多。 –

0

好吧,首先,我需要定義我的專欄的家庭是這樣的: 創建表測試( 用戶文本, itemLiked文本, 主密鑰(用戶,itemLiked) )

所以用戶是行鍵,itemLiked是集羣鍵。 如果我向此cf插入值,cassanndra不會爲該 創建行(內部),並且itemliked值將是列的名稱 插入test(user,itemLiked)值(「user1」,「Item1」) ; insert into test(user,itemLiked)values(「user1」,「Item1」);

所以卡桑德拉將創建具有名稱的Item1和項目2兩個列用於rowkey USER1 此列甲肝不任何值,並且如本文中描述:在一行 http://cassandra.apache.org/doc/cql3/CQL.html此外,表必須限定至少一個列不是PRIMARY KEY的一部分,因爲行只存在於Cassandra中,除非它包含至少一個此類列的值。