2016-05-30 37 views
2

我想模擬一個內容表,它有一個時間戳,按時間戳排序。但是,如果用戶決定編輯內容,我希望該時間戳發生更改(以使內容重新出現在列表頂部)。Cassandra如何使用有序的列進行建模?

我知道你不能更改主鍵列,所以我不知道如何構造這樣的東西。以下是一個示例表。

CREATE TABLE content(
id uuid 
category text 
last_update_time timestamp 
PRIMARY KEY((category, id),last_update_time)) WITH CLUSTERING ORDER BY (last_update_time); 

如果我希望數據按可更改的列進行排序,應如何爲此表建模?

+0

不能更新如果它是主鍵的一部分,則爲時間戳。你真的需要通過Cassandra的時間戳來訂購,而不是僅僅在客戶端進行訂購? –

回答

-1

2解決方案

1)如果你不在乎有更新歷史

CREATE TABLE content(
id uuid 
category text 
last_update_time timestamp 
PRIMARY KEY((category, id)) 

// Retrieve last update 
SELECT * FROM content WHERE category = 'xxx' AND id = yyy; 

2)如果你想保持更新的歷史

CREATE TABLE content(
id uuid 
category text 
last_update_time timestamp 
PRIMARY KEY((category, id),last_update_time)) WITH CLUSTERING ORDER BY (last_update_time DESC); 

// Retrieve last update 
SELECT * FROM content WHERE category = 'xxx' AND id = yyy LIMIT 1; 
+0

這些解決方案如何?第一個不是有序的,第二個不允許我更新時間戳 –

+1

對於第二個,當更新發生時插入一個新值:INSERT INTO content(id,category,last_update_time)VALUES( ...)'然後從Cassandra獲得**最新**更新:'SELECT * FROM content WHERE category ='xxx'AND id = yyy LIMIT 1;'。請注意,所有更新歷史記錄都會保留。清理更新歷史記錄需要由應用程序手動完成 – doanduyhai

相關問題