ConsistencyLevel株式会社ムロドーとみたかずたか
全回アジェンダcassandraを複数で立ち上げるコンシステンシーレベルとはゴシッププロトコル?複数ノードで異なる設定巨大なデータを入れてみるノードのスプリットブレイン
アジェンダConsistencyLevelとは?データは何処にあるのか?データは何処まで書き込まれるのか?データは何時書き込まれるのか?データを読み込む
データは何処にあるのか?(Partition)複数ノードを立ち上げた時に実際データは何処にあるのかstorage-conf.xmlのPartitionerがorg.apache.cassandra.dht.RandomPartitionerの場合(デフォルト)、キーをMD5でHash値化した値を整数とみなし、0から2^127の間の各ノードが持つレンジに割り当てる。例)KS「TimeStampSimpleTrees」、CF「SimpleTrees」、key「3」、Column「id」データの場合TimeStampSimpleTrees.SimpleTrees['3']['id']keyをmd5でハッシュ化->「314755909755515592000481005244904880883」Nodetoolよりpompadour@zaku2-F-1:~$ nodetool --host 192.168.1.104 ringAddress       Status     Load          Range                                      Ring                                       123621947362397555094783433836216926846    192.168.1.106 Up         21.53 MB      4368941974377008489670679703283346037      |<--|192.168.1.6   Up         11.01 MB      53716703941129153059732412441632990819     |   |192.168.1.104 Up         4.37 MB       72360816833403413813516172818645147903     |   |192.168.1.109 Up         10.95 MB      123621947362397555094783433836216926846    |-->|192.168.1.109のキー「123621947362397555094783433836216926846」より大きいよってプライマリレプリカは「192.168.1.106」
データは何処まで書き込まれるのか?複数ノードを立ち上げた時にデータはどのノードに書き込まれるのか?storage-conf.xmlのReplicaPlacementStrategyがRackUnawareStrategyの場合(デフォルト)、 ring上で隣り合うn-1分、右のノードまで書き込む。(next 2-1 nodes)N=ReplicationFactor例)key「3」のハッシュ化->「314755909755515592000481005244904880883」ReplicationFactor=22-1ノード右まで192.168.1.1064368941974377008489670679703283346037192.168.1.653716703941129153059732412441632990819192.168.1.109 123621947362397555094783433836216926846 192.168.1.10472360816833403413813516172818645147903
thriftAPIで見てみるthriftAPIのdescribe_ringを使用してリング情報を取得する。例)KS「TimeStampSimpleTrees」のringを取得ReplicationFactor=2結果を成形[TokenRange(end_token='123621947362397555094783433836216926846',start_token='72360816833403413813516172818645147903',        endpoints=['192.168.1.109', '192.168.1.106']),TokenRange(end_token='72360816833403413813516172818645147903',start_token='53716703941129153059732412441632990819',       endpoints=['192.168.1.104', '192.168.1.109']),TokenRange(end_token='4368941974377008489670679703283346037',start_token='123621947362397555094783433836216926846',       endpoints=['192.168.1.106', '192.168.1.6']),TokenRange(end_token='53716703941129153059732412441632990819',start_token='4368941974377008489670679703283346037',       endpoints=['192.168.1.6', '192.168.1.104'])]「3」のhash値「314755909755515592000481005244904880883」は「 192.168.1.109」, 「192.168.1.6」に格納される。
データは何時書き込まれるのか?複数ノードを立ち上げた時に実際データは何時書き込まれるのか?ReadOPConsistencyLevelZEROmemtableFlushMemoryDiskSSTableSSTableSSTableWriteOPCommitLogYESForlocalNoYESWithhintsWriteHintsNoMessageSenttoothernode
データは何時書き込まれるのか?複数ノードを立ち上げた時に実際データは何時書き込まれるのか?ConsistencyLevel  その他CommitLogYESForlocalNoYESWithhintsWriteHintsWriteOPNoSentmessagestoothernodeReturnmessagefromothernode
データを読み込む複数ノードの場合データはどの様に呼び出されるのか?対応しているのは現状ConsistencyLevel.ONEとConsistencyLevel. QUORUMのみ。「ONE」:最初に接続要求のあったノードによって返されたレコードを返答。	一貫性を保持するためにバックグラウンド系で常時チェックを実行。	最初の要求で古いデータを返答したとしても、その後の呼び出しで正しいデータを返答。(「リードリペア」と呼ばれます。)「QUORUM」:いったん全てのノードに問い合わせを行い、レプリカも含めた返答データの内、	最も新しいTimeStampを持つレコードを返答。	古いレコードを持つレプリカはバックグラウンドでチェックされる。
宣伝日経BP様より依頼があって日経Linuxに記事書きました。でも原稿提出してからレスポンスが殆どないので本当に掲載されるか分かりません。W内容はAmazonEC2で複数ノードのCassandraを使うです。質問等有れば連絡ください。	twitter:railuteblog:http://www.intheforest.jp/blog/         e-mail:tomitakazutaka@gmail.com

Consistency level