2015-09-28 115 views
0

我目前在卡桑德拉稱爲macrecord表看起來是這樣的:卡桑德拉:數據建模

macadd   | position | record | timestamp 
-------------------+----------+--------+--------------------- 
23:FD:52:34:DS:32 |  1 |  1 | 2015-09-28 15:28:59 

但是我現在需要做將使用時間戳列來查詢了一系列的問題。如果沒有時間戳作爲主鍵(在這種情況下爲macadd)i-e,而沒有它作爲集羣鍵,我認爲這是不可能的。

如果我做時間戳作爲主鍵的一部分的表看起來象下面這樣:

macadd   | timestamp   | position | record 
-------------------+---------------------+----------+-------- 
23:FD:52:34:DS:32 | 2015-09-28 15:33:26 |  1 |  1 

但是現在每當我得到一個重複的macadd我不能更新timestamp列。

update macrecord set timestamp = dateof(now()) where macadd = '23:FD:52:34:DS:32'; 

給出了一個錯誤:

message="PRIMARY KEY part timestamp found in SET part" 

我不認爲在這種情況下,除了刪除整排的其他解決方案,如果有macadd的一個重複的值,然後插入新行帶有更新的時間戳。

是否有更好的解決方案來更新時間戳,每當有一個重複的值的macadd或另一種方式來查詢我的原始表中只有macadd是主鍵的範圍內的時間戳值。

+0

可能重複[Cassandra UPDATE主鍵值](http://stackoverflow.com/questions/27022325/cassandra-update-primary-key-value) – Aaron

+0

雖然你還沒有發佈你的表定義,我可以告訴你所做的並不像在關係世界那樣直截了當。如果你需要'更新'你的時間戳,那麼它不能成爲你的主鍵的一部分。 – Aaron

+0

@Aaron:如果我不將時間戳添加到主鍵,那麼我無法使用時間戳執行範圍查詢。這是我有兩個相反的限制。我正在創建一個表,如下所示:CREATE TABLE IF NOT EXISTS HAS.MACRecord(MACAdd VARCHAR PRIMARY KEY,Timestamp timestamp,Record int,position int);是否可以在時間戳上執行範圍查詢而不將其作爲主鍵的一部分? – srai

回答

0

要在CQL中執行範圍查詢,您需要將時間戳記作爲集羣密鑰。但正如你所看到的,你不能在不刪除和插入新密鑰的情況下更新關鍵字段。

Cassandra 3.0在10月份發佈時將提供的一個選項是物化視圖。這將允許您將時間戳記作爲基表中的值列和視圖中的集羣列。看一個例子here