列是 Cassandra 數據模型中最基本的數據結構單元,每次向 Cassandra 寫入數據時,會爲更新的各個列值生成一個時間戳
。如果多個寫操作同時修改同一個值,則 Cassandra 內部就會使用這些時間戳來解決衝突,我們可以通過 writetime(column)
指令來查看相應的時間戳信息,下面是詳細的操作:
首先我們先建一張臨時表,有三個列,當前表中沒有數據
通過 INSERT
語句,向 Cassandra 中插入一條數據
此時我們就可以通過 writetime
來查詢這兩個列值的時間戳
這裏要注意,我們不可以請求主鍵列的時間戳,進行請求則報錯
我們知道對於更新操作,更新的最基本單位應該是列,接下來我們通過時間戳來證明
對剛纔的數據進行更新操作,將 test_b,由 1 變成 2
我們可以看到值更新,更新成功
我們再查看這兩個列值的時間戳
我們可以看到,test_b 列對應的時間戳已經更新,且大於 test_c 的時間戳,證明了更新實際上是以列值爲單位,而不是整條數據進行更新
我們也可以指定時間戳進行更新,例如使用 UPDATE
語句,使用 USING TIMESTAMP xx
進行指定,例如我們將 test_b 的值修改爲 5,同時指定了時間戳
這裏注意一點,如果指定的時間戳小於當前的時間戳,是沒有用的,因爲 Cassandra 會比較通過最後的時間戳未準,例如我現在將 test_b 從 2 改爲 5,但是指定一個小於數據庫記錄的時間戳
這裏可以看到更新沒有成功,根本原因就是 test_b 的列值中,2 的時間戳大於 5的時間戳