2016-01-23 62 views
0

設置我有4個用於cassandra集羣(相同數據中心)的節點。複製因子是3.寫一致性設置爲全部Datastax Java API如何處理cassandra中ALL的一致性級別

據我所知,Cassandra沒有主節點。因此,我可以根據需要將數據寫入任意隨機節點。假設我有03個節點A,B和C.我向節點A寫入記錄123,其值爲4.

問題1:會阻止Session對象中的execute()方法,直到數據被複制所有副本?

另一種情況:比方說,記錄123的5值也被寫入到節點B,用於插入記錄123的4值的請求後的100毫秒到達節點A.

問題2 :當B是A的複製品時,cassandra如何處理其架構中的這種情況? Cassandra節點是否會利用其內部時間來決定哪個節點首先接收到記錄?或者所有副本將共享相同的鎖定以寫入數據?

問題3:當B不是A的副本,並且我已將讀取一致性設置爲ALL時。如果我在節點A或B上隨機查詢記錄123的值,Cassandra如何處理這種情況?

我是卡桑德拉的新手,因此任何答案或幫助都非常感謝。

非常感謝。

回答

3

Session對象中的execute()方法會被阻塞,直到數據在所有副本上被複制?

會話對象將被阻塞,直到Ñ確認收到你的突變(一個或多個)的 S,n取決於所選擇的一致性水平。在你的情況下,因爲你使用ALL,客戶端將阻塞,直到從所有副本收到確認。

當B是A的複製品時,cassandra如何處理其架構中的這種情況? Cassandra節點是否會利用其內部時間來決定哪個節點首先接收到記錄?或者所有副本將共享相同的鎖定以寫入數據?

協調節點(其接收該請求的一個)將派出寫入,並聯,到所有副本。對於像Java驅動程序這樣的現代驅動程序,大多數時候選擇協調程序節點,以便它是插入分區的複製品,以避免額外的網絡跳躍。

協調員的作用也是在寫入的每一列上設置一個時間戳值。此時間戳是相同的,並將發送到所有副本

當B不是A的副本,並且我已將讀取一致性設置爲ALL時。如果我在節點A或B上隨機查詢記錄123的值,Cassandra如何處理這種情況?

在這種情況下,接收到該請求的節點,稱爲協調,將通過將請求轉發到適當的副本(S)和通過轉發響應(一個或多個)作爲代理接收回客戶端。

每個節點都知道整個集羣的拓撲(令牌範圍,IP地址),以便每個節點隨時都可以扮演協調器的角色。

更多關於如何將數據分佈在卡桑德拉這裏處理細節:http://www.slideshare.net/doanduyhai/cassandra-introduction-apache-con-2014-budapest/18

+0

非常好的解釋。非常感謝你。 – Xitrum

相關問題