我正在設計卡桑德拉柱系列。Cassandra如何處理選擇查詢?
在加載更高密度的數據之後,我遇到了選擇時出現較高GC的情況。也就是說,分區中的數據量增加了。對於低密度數據,它也可以正常工作。
我想知道Cassandra如何執行SELECT查詢(同時指定了分區和集羣密鑰)?
當我們執行SELECT時,分區中的整個數據集是否被加載到內存中?
大量分區鍵會影響性能嗎?
我正在設計卡桑德拉柱系列。Cassandra如何處理選擇查詢?
在加載更高密度的數據之後,我遇到了選擇時出現較高GC的情況。也就是說,分區中的數據量增加了。對於低密度數據,它也可以正常工作。
我想知道Cassandra如何執行SELECT查詢(同時指定了分區和集羣密鑰)?
當我們執行SELECT時,分區中的整個數據集是否被加載到內存中?
大量分區鍵會影響性能嗎?
Cassandra不會將整個分區加載到內存中,但它會加載IndexInfo對象,這些對象可以幫助Cassandra在分區中查找相關的CQL行。這些是短暫的Java對象,可以產生相當大的堆壓力(GC暫停) - 這是一個將在CASSANDRA-9754(稱爲Birch,索引數據結構的b-tree實現)中解決的設計問題。
在cassandra-4.0發佈之前,您應該將最大分區大小定爲100MB,並將較大的分區分成較小的塊。
謝謝傑夫。如果我增加分區數(分區數<2^63),它會如何影響Cassandra的性能?尤其是閱讀表現? – kjk
很多分區都很好。你甚至可以超過2^63,如果你有這麼多的數據(cassandra可以處理多個分區鍵哈希到相同的令牌就好了)。 如果您一起查詢,您真的只需要分區中的數據,其中cassandra可以對磁盤上的數據進行聚類(分類)並分組抓取。如果你沒有從分區中抓取很多行,請將其分解。 此外,如果您有多個分區,則可以一次發出多個異步SELECT調用,並且可以更高效地並行化查詢。 –
請添加查詢樣本,並詳細說明您的意思是高密度和低命運。它是使用或不使用集羣密鑰進行查詢,並且每個分區在關聯的集羣列上是高還是低? – dilsingi
表的結構是這樣的 - 主鍵(A,B,C)。表中也有幾個字段(p,q,r,s,t)。示例查詢 - SELECT p,q,r,s,t FROM table where A =? AND B =?; – kjk
隨着更多B和C條目被插入,數據密度會增加。 – kjk