自2007年開發以來,Apache Cassandra已成為大型企業使用的可靠、高度可擴展、可靠的NoSQL數據存儲。但它的使用需要一定程度的經驗和專業知識。因此,在學習這個開源數據庫時,會出現很多問題,這是可以理解的。本文涵蓋了開發人員在各種社區論壇上提出的一些主要問題。
Cassandra中的分區、集群和組合鍵有什麼區别?
理解寬列數據庫中的主鍵與關系型主鍵的區别是學習使用Cassandra的能力的關鍵一步。
像Cassandra這樣的寬列存儲使用列族的概念,這是一個數據庫對象,包含多列相關數據,這些數據一起使用,類似于傳統的關系數據庫表。在給定的列族中,所有數據都以逐行的方式存儲,因此給定行的列存儲在一起,而不是單獨存儲每列。
換句話說,列族是鍵—值對,其中鍵映射到一組列的值。與關系數據庫類似,列族就像一個“表”,每個鍵—值對都是一個“行”。對于開發人員來說,寬列表可以表示為一個行和列表,在代碼中或通過API很容易使用。
讓我們看一些示例代碼,以幫助将這些概念付諸實踐。
在上面的代碼中,我們有一個鍵空間,一些字段如“城市”、“姓氏”和“名字”。主鍵位于底部。順便說一下,Cassandra中的所有表必須至少包含一個分區鍵。在上圖突出顯示的示例中,我們将按“城市”進行分區。
接下來的任何内容都是集群列。注意“city”周圍的括号——這表示這是分區鍵。如果你的分區鍵是複合的并且有多個列,我們使用括号來指示分區鍵是什麼。然後很清楚哪些列是主鍵,哪些列是集群列。
主鍵的主要目的是确保行是唯一的。它還可能包含零個或多個聚類列,可以控制排序。但是主鍵也可以是“複合”或“複合”,這意味着它有兩列或更多列。
分區鍵用于對行進行分區,并具有一個或多個列。
Cassandra如何找到包含想要的數據的節點?
有些人似乎認為驅動程序客戶端隻是向随機節點發送數據。但實際上有一種非随機的方式,驅動程序選擇一個節點進行通信。這個節點稱為協調節點。通常選擇它是因為它最接近。
客戶端請求可以發送到任何節點——首先,它們被發送到驅動程序知道的節點。但一旦驅動程序軟件連接并了解集群的拓撲結構,它可能會變為更緊密的協調器。查看開源生态系統項目Stargate,了解如何将計算和存儲分離以實現可伸縮性。
開源Cassandra集群中的節點使用gossip協議相互交換拓撲信息。gossiper每秒鐘運行一次,确保所有節點都與你配置的告密者的數據保持最新。告密者跟蹤每個節點所屬的數據中心和機架。這樣,協調器節點還可以獲得關于哪些節點負責每個令牌範圍的數據。
你可以通過從命令行運行節點工具“ring”來查看這些信息,盡管如果使用虛拟節點或“vnodes”,這将有點棘手,因為所有256個虛拟節點上的數據(默認數量)将很快在屏幕上閃爍。
在K8ssandra.io中,這種行為更像是Kubernetes原生的,使用Etcd而不是Gossip協議來傳播集群元數據以及安全模式更新。
二級索引在Cassandra中如何工作?
索引相當微妙。它有助于理解數據庫内部。這個查詢在Cassandra内部如何工作?看看這個示例代碼:
Select *from update_audit
Where scopeID=35and
formid=78005and
record_link_id=9897;
這個查詢在Cassandra内部如何工作?
基本上,将返回作用域ID等于35且表單ID等于78005的分區的所有數據,然後通過記錄鍊接ID索引進行過濾。它将查找9897的記錄索引ID條目,并嘗試匹配與返回的行匹配的條目,其中範圍ID等于35,表單ID等于78005。将返回分區鍵和索引鍵的行的交集。
你可能會問,像記錄鍊接ID索引這樣的高基數列是否會影響查詢性能。高基數索引基本上為主表中的幾乎每個條目創建一行。性能可能會受到影響,因為Cassandra是為查詢結果的順序讀取而設計的。索引查詢本質上迫使Cassandra在索引基數增加時執行随機讀取,查找查詢值所需的時間也會增加。
那麼,Cassandra會為上述查詢接觸所有節點嗎?不,它應該隻接觸負責作用域ID等于35和表單ID等于78005分區的節點。同樣,索引存儲在本地,隻包含對本地節點有效的條目。
Cassandra和Datastax Astra DB之間有什麼區别?
Cassandra是一個開源的NoSQL數據庫,為你可能每天都在大規模使用的分布式應用程序提供支持。然而,這取決于你和團隊的自我管理。
Astra DB是一種無服務器的數據庫即服務。這是一個完全管理、自動縮放的雲服務,構建在Cassandra之上,并在你選擇的公共雲提供商上運行。
随着開源數據API網關Stargate的加入,Cassandra和Astra DB都提供文檔、列和關鍵值NoSQL工作負載。如果使用Astra DB,Stargate将自動設置。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!