2010年5月21日金曜日

Cassandraの不安点

■用語定義
*Data保持該当Node
書き込まれるデータのKeyのHash値を元に決定された、ReplicationFactorにて指定されたn個のNode という意味です。

shot6さんから回答をいただいたので追記

1.Data保持担当Nodeが自分以外の時、強度ANYで書込した際、書込要求転送先の決定方法は?
書き込み可能で生きているエンドポイントとそのノードから予測をたてる。ローカルアドレス、ラック、DCの近いほうから一致具合をみてきめる。場所でいうと、AbstractReplicationStrategy#getHintedEndpointsです。

2.Data保持担当Nodeが自分以外の時、強度ONEで書込した際、「全ての」保持担当Nodeに「同時に」要求を転送して一個から処理完了報告があったら応答を返す?
明らかにNOかと。投機的実行はしないです。

3.Data保持担当Nodeが自分以外の時、強度QUORAMで書込した際、「全ての」保持担当Nodeに「同時に」要求を転送して最小過半数から処理完了報告があったら応答を返す?
NOですね。StorageProxy#determineBlockForで書き込むノード数が最初に絞られています。というわけで全てのノードに同時に、とかはしないです。

4.強度ONEで読込した場合、Clientへの応答後に「必ず」ReadRepairが走る?
条件付でYESです。Read repairはONEの場合実行されます。ただし、OFFにすることも出来て、storage-conf.xmlのDoConsistencyChecksBooleanをfalseにするとOFFできます。

5.強度QUORAMで読込した場合、Data保持担当Node「全てに」Data要求をだし、最小過半数が返ってきた段階で、それらの値が一致しなかった場合、その中で「最も新しいTimestampを持つ値」を返し、その後に「必ず」ReadRepairが走る?
ミスマッチの場合最新の値を返すわけではなく、先にReadRepairしてもう一度読んで返してますね。1度ReadRepairしてもダメだとあきらめてDigestMismatchException返します。

6.Data保持担当Nodeが自分の時、強度ZEROで書込した際、どの様な処理が行われる?
まんま非同期でmutateします。返事もまたない感じ。StorageProxy#mutateです。

7.Data保持担当Nodeが自分の時、強度ANYで書込した際、どの様な処理が行われる?
Hintを書き込む意外はONEと同じ動きです。
コメントを投稿