我知道Cassandra具有不同的讀取一致性級別,但是我沒有看到一致性級別,它只允許從一個節點按鍵讀取數據。我的意思是,如果我們有一個複製因子爲3的羣集,那麼當我們閱讀時,我們將始終詢問所有節點。即使我們選擇一個一致性級別,我們也會詢問所有節點,但要等待來自任何節點的第一個響應。這就是爲什麼我們在讀取時不僅會加載一個節點,而且會加載3個(4個帶有協調器節點)。即使設置了更大的複製因子,我認爲我們也無法真正提高讀取性能。
真的只能從單個節點讀取嗎?是否可以僅從複製因子爲3的Cassandra集羣中的單個節點讀取數據?
回答
您使用令牌感知負載平衡策略嗎?
如果您是,和您使用LOCAL_ONE/ONE的一致性查詢,讀取查詢應只聯繫單個節點。
給文章Ideology and Testing of a Resilient Driver一個閱讀。在這裏面,你會發現,使用TokenAwarePolicy有這樣的效果:
「對於單個數據中心的情況下,TokenAwarePolicy通過避免選擇典型的主副本是在削減延遲的希望所選擇的協調協調者 - 副本跳躍「。
這就是發生了什麼事。假設我有一個跟蹤Kerbalnauts的表格,我想獲取「Bill」的所有數據。我會用這樣的查詢:
SELECT * FROM kerbalnauts WHERE name='Bill';
司機我散列分區鍵值(名)的(SELECT token(name) FROM kerbalnauts WHERE name='Bill';
返回該值)的標記。如果我有6個節點的集羣工作,那麼我的主令牌範圍將是這樣的:
node start range end range
1) 9223372036854775808 to -9223372036854775808
2) -9223372036854775807 to -5534023222112865485
3) -5534023222112865484 to -1844674407370955162
4) -1844674407370955161 to 1844674407370955161
5) 1844674407370955162 to 5534023222112865484
6) 5534023222112865485 to 9223372036854775807
爲節點5是負責包含分區鍵的標記範圍「比爾,」我的查詢將被髮送到節點5.當我讀取LOCAL_ONE的一致性時,將不需要聯繫另一個節點,並且結果將返回給客戶端...僅擊中單個節點。
注:標記範圍計算有:
python -c'print [str(((2**64 /5) * i) - 2**63) for i in range(6)]'
我的意思是如果我們有3個複製因子集羣,然後我們會一直要求所有節點時,我們讀到
錯誤,一致性級別ONE協調器選擇最快的節點(具有最低延遲的節點)來請求數據。
它如何知道哪個副本是最快的?通過保持每個節點的內部延遲統計信息。
隨着一致性水平> =法定人數,協調會要求數據從最快的節點和還詢問消化來自其他副本
從客戶端,如果您選擇合適的負載均衡策略(如TokenAwareStrategy)使用一致性級別時,客戶端將始終與主副本進行聯繫ONE
好的工作澄清關於「總是詢問所有節點「,當在RF上閱讀」1「時,這聽起來並不正確。 – Aaron
- 1. 在3節點Cassandra集羣中將複製因子設置爲2;但是仍然有數據在插入時被複制到所有3個節點
- 2. 對於Cassandra中具有多個數據中心中的LOCAL_ONE的一致性級別的3節點羣集,複製因子3是否可接受?
- 3. 決定種子節點數爲3且複製因子爲3的cassandra節點的最佳數目
- 4. Cassandra集羣單節點
- 5. 是否可以將節點添加到數據同步複製的羣集?
- 6. Cassandra集羣舊數據未複製到新節點
- 7. 將多節點Cassandra集羣中的數據移動到單個節點實例
- 8. 2節點的Cassandra集羣
- 9. 元數據是否存儲在Cassandra集羣的每個節點中?
- 10. 即使在任何節點出現故障時,是否可以從cassandra羣集中讀取
- 11. 將2節點cassandra集羣轉換爲1節點集羣
- 12. 我們是否可以僅備份AZ複製的Cassandra集羣的一個可用區
- 13. 跨羣集的Cassandra不同複製因子
- 14. Cassandra:在一個環中有10個節點,複製因子爲3,如果3個節點關閉,獲得仲裁的概率是多少(2個節點)?
- 15. Cassandra集羣與節點
- 16. 在開發人員或測試羣集(單節點羣集)上還原Cassandra快照(來自3節點羣集)
- 17. 您是否可以爲Redis羣集(主/從)設置單端點?
- 18. 兩個集羣,每個集羣都有12個節點 - Cassandra數據庫
- 19. Cassandra集羣中每個節點有多少數據?
- 20. 有什麼方法可以找到Cassandra集羣中的種子節點列表
- 21. 是否可以使用單個節點建立神經節羣集?
- 22. 如何從集羣中的一個節點運行cassandra repair/compact
- 23. Cassandra未在集羣中的現有節點上平衡數據
- 24. ElasticSearch:如果出現裂腦,複製節點是否可以被羣集拒絕?
- 25. 羣集中ejabberd節點的最大數量是否有限制?
- 26. 有多個數據中心時的Cassandra複製因子
- 27. 如何在cassandra中複製表時複製在羣集中多個節點上的複製?
- 28. 是否可以選擇一個只包含子節點子集的節點?
- 29. 如何從節點中使用sstableloader而不是Cassandra集羣環
- 30. 4節點Cassandra集羣,每個集羣都有50.00%
哇!謝謝你澄清。我是否正確理解,如果我們增加複製因子,那麼我們線性增加讀取吞吐量? – Alexandr
@Alexandr這個想法有很多矛盾的信息。當然,它會增加您的可用性。但就吞吐量而言,下面是一個問題的鏈接,似乎證實了相反的情況(表明較高的RF *降低了吞吐量,並且鏈接到一個問題,其中一個答案表明與*相反*讓你決定自己):http://stackoverflow.com/questions/27084341/effects-of-increasing-the-replication-factor-on-the-performance-of-cassandra – Aaron