最近ひょんなことからSNSでも作ろうかなって考えて、Apache Cassandraを勉強がてら使ってみようかと思いました。勉強を始めてみたはいいけど、ドキュメントを読んでもあまり理解できていない気がしてしょうがない。ドキュメントめ。もう少し図とかでわかりやすく書いてほしい。こうなったら自分で描いてやるってなわけで描いてみました。これで認識が合ってるのかどうか確認できる友達も親切なエンジニアも持ち合わせていないため間違っていてもご了承願います。ちなみにこの辺りを読んで理解したことをまとめてます。
Cassandraは全体がリングになってて、マスターとなるノードが存在しないので単一障害点がない。そのためサービスが止まることなく常に稼働できるっぽい。ノードを追加すればするほど性能は上がっていくらしい。
ノード間はピアツーピアのゴシップ通信されていて常に情報を交換しあっている。データが書き込まれる際はコミットログが記録されて、データにはインデックスが付与されてmemtableっていうとこに書き込まれる。それがいっぱいになるとSSTable形式でディスクに書き込まれる。
データ・センターっていうのがノードの集まりで物理的なものと仮想的なものがある。クラスタっていうのは複数の物理的な所在地をまたがるみたい。Cassandraっていうのはレプリケーションがなんかすごいらしい。
テーブルに書き込まれた各行はパーティション・キーと呼ばれる一意のトークンがついてて、トークンをハッシュ化する方法は3つから選べる。公式ドキュメント的にはMurmur3Partitionerが最適って言ってる。
ノードがどこに所属しているかはスニッチが決めるらしい。この辺あんまりよくわかっていない。スニッチはCassandraがレプリカを分散するために必要なもので、様々な指定方法があるってくらいの認識でいいのかね。
実際使ってみないとわかんない?
ドキュメント読んで大枠の大枠くらいは何となく頭に入った気がします。cloud9でApache Cassandraの環境整えてみたので、今度使ってみようと思います。その時なんか気づいたことがあれば記事にしますわ。以上。