cassandra

cassandraの学習で下記を使用。
www.oreilly.co.jp

感想として意外と内容は浅かった。

データのイメージの具体化、パーティションキー、プライマリーキー、タイムスタンプ、カラムファミリ、カラム、ローキーの情報がもう少し欲しい。

JMXについて、ゴシッププロトコルについても理解を深めたい。

後、ノードを切り離す手順についても理解を深めたい。

ブートストラップの理解も怪しい。

nodetoolコマンドの検証

最近の記事
joker1007.hatenablog.com
勉強になるが、用語が乱発しており把握しづらい。皆わかるのだろうか。
presto、coordinator、パーティションキーの用語があるが、学習している本には記載がない。

上記に関して説明はありそうだが、十分な情報が記載されているのだろうか。

tomstoneについて補足
opencredo.com

syossan.hateblo.jp

データについて補足
docs.datastax.com

リペアの挙動
oranie.hatenablog.com
gc_grace_secondsを過ぎて完全に削除されたはずのデータが復活することがあるらしい。

不明点用語、不明点の確認を行う。

いきなり使用されていた用語を確認
・シェアードナッシング
シェアードナッシングとは - IT用語辞典

・シャーディング
docs.oracle.com
シャーディングは、独立したデータベース間でデータが水平にパーティション化されるデータ階層アーキテクチャです。
→ 意味不明

キースペースとカラムファミリ
Cassandra のキースペースは、リレーショナルデータベースのデータベースに近い概念。
キースペースは 1 つかそれ以上のカラムファミリを持ち、リレーショナルな世界で言うところのテーブル。

寄り道 cassandraインストール
分散データベースApache CassandraをMac OS Xにインストール | 三度の飯とエレクトロン

下記より本の内容に沿った整理

3.2 簡単な概論
カラム、ロウ、ロウキー、カラムファミリ、スーパーカラムファミリ

11.9.1 JVMのチューニング
cassandra-env.shに記述されているJVMオプションで行う。
cassandra-env.sh ファイルをテキストエディタで開いて、値を変更して再起動すればよい。

spyced.blogspot.com
全然分からない。

5.5 memtable、SSTable、コミットログ
memtable は org.apache.cassandra.db.Memtable クラスで実装されている。

5.7 コンパクション
SSTableをマージする。キーはマージされ、カラムは結合される。tomstoneは廃棄される(2年間は保持される?)
→SStableは不変というが、コンパクションでマージされるはずである。

5.9 トゥームストーン
トゥームストーンは、コンパクションが実行されるまで SSTable 内の古いデータを隠しておくのに必要な削除マーカー。

6.7 クラスタの作成    6.7.3 複数のシードノード
Cassandra では複数のシードノードを指定することができる。シードノードは他のノードの コンタクトポイントとなるので、Cassandra はクラスタのトポロジやどのホストがどのデータ範 囲を持つかなどを理解することができる。

7.6 データの準備とインサート
EclipseJava プロ ジェクトを使用。
まず新しいプロジェクトを作成し、クラスパスにいくつかの JAR を追 加。
ログステートメントを出力するだけの Log4J の JAR(あなた自身のクラスのプロパティファイルを設定することを忘れないように)。
org.apache.thrift クラスを含む libthrift- 0.6.jar という Thrift ライブラリと、
org.apache.cassandra クラスが含まれている Cassandra JAR の apache-cassandra-xxx.jar と apache-cassandra-thrift-xxx.jar を追加する。
また、SLF4J logger(API と実装の両方の JAR)が追加で必要です。
最後に、クラスパスに log4j.properties ファイルを追加するためにJVM に引数を追加します。

下記で今時につながると思われる。
blog.katty.in

10章
メンテナンス

Nodetool で操作できることの多くは、JMX インタフェースで利用可能な機能と重複している。
なぜなら、Nodetool は裏側で NodeProbe というヘルパークラスを使用して JMX を呼び出してい るからである。
実際には JMX が動いているので、NodeProbe クラスは JMX エージェントへの接続と データの整理ために使用され、NodeCmd クラスはインタラクティブなコマンドラインインタフェース で JMX エージェントを提供するために使用される。

10.3.1 リペア
Nodetool の repair コマンドを実行すると、Cassandra はメジャーコンパクション(用語集の「コンパクション」を参照)を行う。
ターゲットノードのマークルツリーが計算され、その マークルツリーは他のレプリカと比較されます。このステップでは、他のノードとの同期がとれていないデータがないかを確認する。

10.4.1 スナップショットの作成
以前に取得したスナップショットをリストアする場合には、いくつかの簡単なステップを実行す る必要がある。
ノードをシャットダウンし、古い SSTable とコミットログを削除する。
次 に、スナップショットディレクトリから通常のデータディレクトリにすべてのファイルをコピーする。

JMX
9章 監視
9.2 JMX および MBean の概要
JMX は、次の 2 つの主要な方法でアプリケーションの管理を提供する Java API である。
1 つ目は、 JMX を使用すると、アプリケーションの状態、メモリやスレッド、CPU 使用量に関する全体的な パフォーマンスを把握することができる(一般的に、これらはいかなる Java アプリケーション に対しても適用可能てある)。
2 つ目は、JMX を使用すると、アプリケーションを特定の条件で動か すことができます。

java.lang.management パッケージを調べることで、Java における JMX 実装の詳細を知ることがで きるらしい。

9.2.2 JMX の統合
Cassandra で JMX を有効にするのは簡単てだが、いくつかやらなければならないことがある。
http://mx4j.sourceforge.net に行き、MX4J ライブラリのバージョン 3.0.1 をダウンロードする。より新しいバージョンを使用したいと思うだろうが、このバージョンが動作保証されている。ライブラリをダウンロードしたら、解凍し lib ディレクトリへ移動する。このディレクト リから mx4j.jar と mx4j-tools.jar の 2 つをコピーする。<cassandra-home>/lib に貼り付けたら、 Cassandra を再起動する。これで、他の Cassandra ノードも、状態を監視するために、さらに は MBean として公開されている機能に値を設定するために、JMX を介して接続できるようになる。
→有効にしなくても、JMXは動いているのか。nodetoolはJMXを利用している。

データの調査
・deleteした場合
markedForDeleteAt
github.com

public DeletionTime(long markedForDeleteAt, int localDeletionTime)
{
this.markedForDeleteAt = markedForDeleteAt;
this.localDeletionTime = localDeletionTime;
}

マイナーコンパクション

stackoverrun.com
メタデータ」のdeleteの行を挿入する。

似たサイズのSStableがいくつかあるとき発生する
docs.datastax.com

ここでマイナーコンパクションとメジャーコンパクションが結構詳細に記載されている。
ただしHBaseを扱った例である。
shiumachi.hatenablog.com なるべく小さいファイルを(ディスクIO低減のため)、なるべく多くの数(将来のディスクシーク数低減のため)コンパクションする。

・データの維持
docs.datastax.com
メガコンパックション例が記載されている。

削除すると、カラムデータに、ttlという有効期限日を秒単位で持たせることができる。

コミットログ

www.slideshare.net
全ての書き込み操作を記録。
全てのColumnFamilyのMemtableがSStableに書き込まれると削除される。

コンパクション対象になるには
tomestoneがあればコンパクション対象になる?

調査事項
SStableの具体的なもの
不変というが、コンパクション後に変わるのではないか。
deleteはSStableに影響があるのか?、memtableの範囲なのか?
CQLはmemtable、SStableに対して処理する、で認識あっているか?

nodetool scrub
docs.datastax.com
再構築は、壊れたデータを自動的に破棄し、テーブルのgc_grace期間を超えたトゥームストーンのマークが付いた行を削除する。
パーティション・キーの値がカラムのデータ型と一致しない場合、パーティションは破損しているとみなされ、プロセスは自動的に停止する。

パーティションキー
qiita.com
ロウキーに相当すると想定している。