2014-03-26 68 views
3

我讀了下面的文章約卡桑德拉:如何使Cassandra對特定的行鍵有不同的列鍵?

http://www.ebaytechblog.com/2012/07/16/cassandra-data-modeling-best-practices-part-1/#.UzIcL-ddVRw

,它似乎意味着,你可以在不同的卡珊德拉列主鍵,對於給定的行鍵。真的嗎?如果它是真的,你如何允許不同的行鍵。

我認爲這可能是真的原因是因爲說我們有一個用戶,它可以喜歡很多項目,我們只是想讓userId成爲rowkey。我們讓這個rowKey(userID)映射到特定用戶可能喜歡的所有項目。每個特定用戶可能會喜歡不同數量的項目。因此,如果我們可以有多個列鍵,每個用戶喜歡每個itemID一個,那麼我們可以通過這種方式解決問題。

因此,是否有可能具有不同長度的cassandra列鍵特定的rowKey? (以及你怎麼做)

提供一個例子和/或一些cql代碼將會很棒!

讓我感到困惑的是,我已經看到一些.cql文件,並且它們事先定義了密鑰空間,並且它似乎對如何使其變爲動態的非常不靈活,即允許它具有其他列。例如:

CREATE TABLE IF NOT EXISTS results (
    test blob, 
    tid timeuuid, 
    result text, 
    PRIMARY KEY(test, tid) 
); 

這怎麼可能允許增長列?無論如何,我們不需要指定名稱嗎?或者根據應用程序的需要添加其他自定義列?

回答

1

您是否想過在cassandra中探索收集支持以共同的方式處理這種關係(例如,在同一個數據節點上}。

不知道它是否有幫助,但將用戶標識保存爲行鍵以及包含項目標識作爲關鍵字和某些值的映射怎麼辦?

-Vivel

2

是的,每行row_key可以有不同數量的列。從關係的角度來看,tid不是一個變量的名稱。它充當變量列鍵的佔位符。在下面的插入聲明中注意,聲明中從未提及「tid」,「result」和「data」。

CREATE TABLE IF NOT EXISTS results (
    data blob, 
    tid timeuuid, 
    result text, 
    PRIMARY KEY(test, tid) 
); 

因此在您的示例中,您需要確定表的row_key,column_key和有效負載。 主鍵包含row_key和column_key。

測試是你的row_key。 tid是您的column_key。數據是你的有效載荷。

以下刀片都是有效的:

INSERT your_keyspace.results('row_key_1', 'a4a70900-24e1-11df-8924-001ff3591711', 'blob_1'); 
INSERT your_keyspace.results('row_key_1', 'a4a70900-24e1-11df-8924-001ff3591712', 'blob_2'); 
#notice that the column_key changed but the row_key remained the same 
INSERT your_keyspace.results('row_key_2', 'a4a70900-24e1-11df-8924-001ff3591711', 'blob_3'); 

here

相關問題