Cassandra數據建模中最重要的事情:主鍵


Cassandra數據建模中要了解的最重要的事情:主鍵

使用關系數據建模,您可以從主鍵開始,但是RDBMS中的有效數據模型更多地是關於表之間的外鍵關系和關系約束。由於Cassandra無法使用JOIN,因此創建數據模型的復雜性要低得多。Apache Cassandra的復雜性折衷在於提前了解您的查詢和數據訪問模式。

1.簡單主鍵:

例子: student_id是person的主鍵

create table person (student_id int primary key, fname text, lname text, 
                     dateofbirth timestamp, email text, phone text );

2.復合鍵

  • C1:主鍵只有一個分區鍵,沒有群集鍵。
  • (C1,C2):列C1是分區鍵,列C2是群集鍵。
  • (C1,C2,C3,...):列C1是分區鍵,列C2,C3等構成集群鍵。
  • (C1,(C2,C3,…)):與3相同,即C1列是分區鍵,C2,C3…列構成集群鍵。
  • (((C1,C2,...),(C3,C4,...))):列C1,C2作分區鍵,列C3,C4,…作群集鍵。

重要的是要注意,當復合鍵為C1,C2,C3時,第一個鍵C1成為分區鍵,其余鍵成為群集鍵的一部分。為了制作復合分區鍵,我們必須在括號中指定鍵,例如:((C1,C2),C3,C4)。在這種情況下,C1和C2是分區鍵的一部分,而C3和C4是群集鍵的一部分。

1.分區鍵

分區鍵的目的是識別存儲該行的群集中的分區或節點。從群集讀取或寫入數據時,將使用一個名為Partitioner的函數來計算分區鍵的哈希值。該哈希值用於確定包含該行的節點/分區。

例如,分區鍵值范圍在1000到1234之間的行可以駐留在節點A中,而分區鍵值范圍在1235到2000之間的行可以駐留在節點B中,如圖1所示。值為1233,則將其存儲在節點A中。

2.集群鍵

集群鍵的目的是按排序順序存儲行數據。數據的排序基於列,這些列包含在集群鍵中。這種安排使使用聚類密鑰檢索數據變得高效。

例子1

CREATE TABLE user_videos ( userid uuid, added_date timestamp, videoid uuid, name text, preview_image_location text, PRIMARY KEY (userid, added_date, videoid) ) WITH CLUSTERING ORDER BY (added_date DESC, videoid ASC);
分區userid,集群鍵排序方式:added_date DESC, videoid ASC


SELECT * FROM user_videos WHERE userid = 522b1fe2-2e36-4cef-a667-cd4237d08b89 LIMIT 10;

例子2

create table marks(stuid int,exam_date timestamp,marks float, exam_name text, 
                   primary key (stuid,exam_date));

分區stuid,默認exam_date升序排序
SELECT * FROM user_videos WHERE userid = 522b1fe2-2e36-4cef-a667-cd4237d08b89 LIMIT 10;
該查詢所要查詢的是“用戶上傳的最后10部視頻”,只需添加CLUSTERING ORDER BY子句即可實現非常快速,有用和高效的查詢。

這可能看起來像是預先優化的,但是此添加功能啟用的用例非常引人注目。

結論

Apache Cassandra的復雜性trade off在於提前了解您的查詢和數據訪問模式。(反模式的一種體現)

參考文章

https://dzone.com/articles/cassandra-data-modeling-primary-clustering-partiti
https://www.datastax.com/blog/2016/02/most-important-thing-know-cassandra-data-modeling-primary-key


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM