Cassandra中的Primary Key、Partition Key、Clustering Key都是什么

Cassandra中的Key有如下三種類型

  • Primary Key
  • Partitioning Key
  • Clustering Key

Primary Key 主鍵

每張表都需要有主鍵。主鍵可以是一個(gè)字段或者多個(gè)字段的組合。每條記錄的主鍵必須唯一。舉個(gè)例子

CREATE TABLE player (
   name text,
   club text,
   league text,
   nationality text,
     kit_number text,
   position text,
     goals int,
   assists int,
   appearences int,
   PRIMARY KEY (club, league, name, kit_number, position, goals)
)

這個(gè)數(shù)據(jù)表的主鍵有多個(gè)字段,稱做復(fù)合主鍵。

分區(qū)鍵

Cassandra根據(jù)分區(qū)鍵,使用一致性哈希算法,把數(shù)據(jù)分配到集群的各個(gè)機(jī)器上。一個(gè)機(jī)器可以包含多個(gè)分區(qū)。Cassandra保證同一分區(qū)鍵的數(shù)據(jù)都在一臺機(jī)器上。通過合理的設(shè)置分區(qū)鍵,可以讓你的查詢讓盡量少的機(jī)器處理,提升查詢的效率

對于單主鍵字段來說,分區(qū)鍵和主鍵是同一個(gè)字段。

對于復(fù)合主鍵字段來說,默認(rèn)情況下,分區(qū)鍵是復(fù)合主鍵的第一個(gè)字段。如上例中,分區(qū)鍵是club字段

可以通過括號來將分區(qū)鍵指定為多個(gè)字段,如將上面CQL的11行修改為

PRIMARY KEY ((name, club), league, kit_number, position, goals)

Clustering Key

Clustering Keys決定了分區(qū)內(nèi)數(shù)據(jù)的排序。讓我們再看一下最初的例子

CREATE TABLE player (
   name text,
   club text,
   league text,
   nationality text,
     kit_number text,
   position text,
     goals int,
   assists int,
   appearences int,
   PRIMARY KEY (club, league, name, kit_number, position, goals)
)

在主鍵中的字段,除了分區(qū)鍵外都是clustering key。既然club是主鍵,那么league name kit_number position goals是Clustering key。你可以定義clustering key中每個(gè)字段的升降序??梢詫?code>kit_number降序、goals升序

排序順序與主鍵中字段的順序相同。因此,在上面的例子中,數(shù)據(jù)是按照如下布局的

  • 所有相同club的運(yùn)動(dòng)員都將分在同一個(gè)分區(qū)
  • 在分區(qū)內(nèi),按照leauge排序
  • 然后按照name排序
  • 然后按照kit_number排序
  • ...

定義不同字段升降序的語法如下(默認(rèn)為升序)

CREATE TABLE player (
   name text,
   club text,
   league text,
   nationality text,
     kit_number text,
   position text,
     goals int,
   assists int,
   appearances int,
   PRIMARY KEY (club, league, name, kit_number, position, goals)
)
WITH CLUSTERING ORDER BY (league ASC, name DESC, kit_number ASC, position DESC );
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容