Cassandraについて③
- 2016年08月08日
- CATEGORY- 1. 技術力{技術情報}
こんにちは!
梅雨の時期です。ジメジメして嫌になりますね。
今回もCassandraの特徴について勉強してみます。
・Cassandraの読み込み/書き込みの仕組み
■読み込み
一貫性レベルに応じて挙動が変わります。
・ONE
1.トークンを計算してデータを保持する一番近いノードを決定
2.対象ノードに読み取り要求を送信
3.データを受け取り、クライアントに返却
・QUORUM(それ以上の一貫性レベル)
1.トークンを計算してデータを保持する一番近いノードを決定
2.レプリケーションを保持するノードを決定
3.一番近いノードに読み取り要求を送信
他のノードにはダイジェストのみの読み取り要求を送信
4.一貫性レベルで指定された数のレスポンスの返却を待つ
5.ダイジェストが一致していれば読み込んだデータを返す。
6.ダイジェストに不一致があれば実データを読み込みにいき、Read Repairを実行。
※Read Repair
読み込み時、各レプリカに違いがあった場合、最新のデータでレプリカを修復。
修復はバックグラウンドで行われる。
(読み込み速度を上げたい場合はOFFにすることも可能)
1.Clientからの読み込み要求を受け取る
2.データを保持しているノードを
■書き込み
クライアントは一貫性レベルを指定して、データの書き込み(登録/更新/削除)要求をクラスタ内のノードに送信。
要求を受けたノードは、どのノードにデータを保持するかを決定し、要求をフォワードする。
下記のように判定を行い、書き込み要求をフォワードするノードを決定。(ローカルの場合もある)
1.トークンを計算し、データを保持するノードを決定
パーティショニング方法(IPartitionerの実装)に基づいてどのノードに属するデータかを決定
2.レプリケーションを保持するノードを決定
3.Hinted Handoffの必要性を判定
本来そのデータを保持するはずだったノードの情報(Hint)をつけて、別のノードにそのデータを格納しておく。
Hinted Handoffを受けとったノードは本来保持するノードのアドレスをSYSTEMテーブルへ保持。
※Hinted Handoffとは
レプリカを所有しているノードがネットワークの問題またはその他の問題で使用できないときに
書き込みが成功した操作からのレプリカを受け入れてクラスターの整合性プロセスと
アンチエントロピーを最適化するCassandraの機能です。
一貫性レベルに応じて挙動が変わります。
・ZERO
非同期でフォワードを行う。クライアントにすぐ返るが、何も保証されない。
・ANY以上
指定された一貫性レベルの数だけフォワード先からレスポンスが返った場合のみ
クライアントにレスポンスを返す。どこかでエラーが発生したら例外を吐く。
—
結構複雑な仕組みで読み書きを行っていますね。
一貫性レベルと処理速度、データ整合性のバランスが難しいような気がしています。
【関連記事】
SOAPUIの便利な使い方①
SOAPUIの便利な使い方②
SOAPUIの便利な使い方③
SOAPUIの便利な使い方④
SOAPUIの便利な使い方⑤
SOAPUIの便利な使い方⑥
JavaWebServerを使ってみるテスト
Splunkを使ってみよう!
SOAPUIの便利な使い方⑦
捨てる前にできること
eclipseでSoapUIを動かしてみる
マウスにもこだわりを
WindowsでDockerを使ってみよう①
忘れがちなGitコマンド
AWSを使ってみる
ヘッドフォンの選び方
Cucumberを使ってみるテスト①
忘れがちなGitコマンド②
Cassandraについて①
Cassandraについて②
- 2016年08月08日
- CATEGORY- 1. 技術力{技術情報}