iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
1
Software Development

scylla 從零開始攻略系列 第 10

Day 10. 主鍵(primary key)

主鍵 的機制在CASSANDRA/SCYLLA 可以說是非常關鍵,但一開始筆者自己在理解上,覺得很難了解其意,直到對於CASSANDRA/SCYLLA 的結構上有大致的了解,之後才稍微比較好懂。

所以回過頭來,今天要來講primary key的部分。

RDMS裡面也有 primary key,代表某張table欄位的唯一值,設定為primary key的欄位可以是單一一個,也可以是多個欄位組合,如果是多個欄位組合而成的primary key,組合出來的數值也不可以重複。

以上在CASSANDRA/SCYLLA 也是一樣的,但是primary的作用,遠遠不只RDBMS。

以單一一個欄位作為primary key,那麼這個primary key也就等於partition key

如果是多個複合欄位,那個這個primary key
= partition key + clustering key

partition key 也叫分區的key,顧名思義,這個key對於分散式資料庫來講,關係到資料的擺放位置機制,不論是寫入或者查詢策略,都跟partition key息息相關。

clustering key的欄位,又稱clustering column。

請注意一點,partition key 可以由一個以上的欄位組成,clustering key同樣也是。

如下面的語法,

cqlsh> USE cycling;
CREATE TABLE rank_by_year_and_name ( 
race_year int, 
race_name text, 
cyclist_name text, 
rank int, 
PRIMARY KEY ((race_year, race_name), rank) 
);

(race_year, race_name) 屬於partition key。

一旦partition key有複數個,那麼在下where條件時,就必定都要指定,譬如上面的舉例來說,race_year和race_name都要出現在where裡面,否則系統會跳出警告並不讓你執行。

rank 屬於clustering key。

TTL 與 primary key

TTL 不能設定是primary key的column,相對的,一個row裡面,非primary key的欄位都可以設定TTL。

(筆者猜測與這資料的分區處理有關,因為partition key在primary key裡面,但找到的官方說明,並沒有特別再額外解釋。)

一旦某個column的TTL過期,CASSANDRA/SCYLLA會檢查整個row,若裡面除了primary key以外的欄位都失效了,該行row也會跟著被刪掉,變得不存在。


上一篇
Day9. TTL 與墓碑
下一篇
Day11. ALLOW FILTERING
系列文
scylla 從零開始攻略30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言