KEIS BLOGは株式会社ケイズ・ソフトウェアが運営しています。

KEIS BLOG

Cassandra を触ってみる2

LINEで送る
[`evernote` not found]
Pocket

shimoda01
こんにちは、下田です。天気が急に暑くなったりで、思っていた以上に食べ物が傷んでいたりして、それを誤って食べてしまう事が多々あり、お腹ピーピーが治りません。皆さんも、食べる前に注意深く食べ物を見て下さいね。ちなみに写真は寿司ではなく、馬肉を海苔で巻いた食べ物です。美味しかったです。

はい、では、今回も引き続き Cassandra について話をしていきたいと思います。今回は、 Consistency level について話をしていきます。実は Cassandra には、もう一つ重要な仕組みがあります。それが、 Consistency level なのですが、簡単に言うと、どれくらいのデータ不完全を許容できるか、自分で決めることが出来ます。これは、 Oracle などの、 Relational Database では、100% の Consistency が保証されているため存在しません。では、一体何なのか説明していきたいと思います。

この Consistency level ですが、書き込み時のレベルと、読み込み時のレベルが設定できます。また前回説明した、 Replication factor とも密接に関係しています。
例えば、 6 nodes あり、 Replication factor が 3 の場合、書き込み時は、 3 nodes に対して書き込みが行われます。(ここで言う書き込みとは、1つのテーブルです。また、 Relational Database でいう transaction は無いため、書き込んだ瞬間に他の Session でそのデータが見えます。)しかし、 Cassandra では、 3 nodes に書き込みが成功するまで待つか、 1 node もしくは、 2 nodes に書き込み成功したら成功とするか設定することが出来ます。これが 書き込みの Consistency level です。パフォーマンスの観点で言えば、 1 node 書き込みが成功したタイミングで結果を返すほうが断然早いです。しかし、データの観点で言うと、 残りの 2 nodes は書き込み失敗しているかもしれないため、データの完全性はかなり低いということになります。

shimoda02
ただ、完全にデータの完全性が低いとは言えないのが Cassandra の面白いところです。仮に、読み込み時に 3 nodes 全てを読めば、データの完全性が保たれるからです。と言うのも、 Cassandra は、カラムのレベルでタイムスタンプを持っています。ですので、仮に 3 nodes 全て読み込んで、それぞれの node で異なる値を持っていた場合、タイムスタンプが一番新しいデータを正とします。書き込み時は、一つの node しか確認しませんでしたが、読み込み時に全ての node を確認することでデータの完全性を実現することが出来ます。

shimoda03
また、逆のパターンも可能です。書き込み時に、 3 nodes 全て書き込めたことを確認して結果を返し、読み取り時は、 1 つの node のみ確認する。このケースはデータの完全性を書き込み時に保証しています。このパターンの場合、パフォーマンスは書き込みは重いが、読み取りがかなり早くなります。よって自分のサービス・ビジネスは書き込みが多いのか読込が多いのかでパターンを選択できるという柔軟性が Cassandra にはあります。これが Consistency level です。書き込み、読み込みそれぞれ、異なるレベルがあるのですが、基本的なもののみ説明したいと思います。

ますは、 ALL です。名前の通り、書き込み時は全ての node に書き込めたか確認してから結果を返します。読み込み時は、全ての node のデータを比較して最新のデータを返します。
QUORUM ですが、これは、 Replication factor の過半数以上に書き込み、もしくは読み込んだ後に結果を返します。RF 3 の場合、3/2 + 1 で、 2 nodes 確認します。 RF 4 の場合、 4/2 + 1 で、3 nodes 確認します。
ONE は名前の通り、 1 つの node しか確認しません。ちなみに、書き込みか読み込み片方を ALL, もう片方を ONE にすると、データの完全性は保たれます。また、読み書き共に QUORUM にすることでも、過半数のデータを正とするので、データの完全性は保たれます。次回は、 Cassandra のテーブルについて見ていきたいと思います。

【関連記事】
Splunkに株価を取り込んでみた ft. Fujikawa
Introduction to Antlr!
Introduction to Antlr! Pt.2
JavaPoetで簡単コード生成!
Introduction to Antlr! Pt.3
モニタリングルーター Sensu
マイクロフレームワーク Spark
Introduction to Antlr! Pt.4
Introduction to Antlr! Pt.5
Cassandra を触ってみる1

LINEで送る
[`evernote` not found]
Pocket