1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Cassandraメモ: パーティション・キーとPartitioner

Posted at

https://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archPartitionerAbout.html
上記Cassandraについてv3.0のドキュメント読んで調べたことをメモします。
実際に動かして確認しているわけではないので、間違いがあるかもしれません。お気づきの点はご指摘ください。

コンシステント・ハッシュ法とパーティション・キー

Cassandraはデータの分散にコンシステント・ハッシュ法を使っています。こちらのスライドで簡潔に説明されています。データ中の特定の部分(キー)をハッシュ関数にかけ、そのハッシュ値によってどのノードにデータを配置するかを決定します。
この方法を用いると、ノードの追加・削除時のデータ移動を少なく済ませられることが多いです。
コンシステント・ハッシュ法はデータを多数のノードに一様分散させる際の定番手法かと思います。

Cassandraにおいて、ハッシュにかけられるキーをパーティション・キー(partition key)と呼びます。設定によって変えられるようですが、基本的(デフォルト?)にはテーブルのプライマリー・キーがパーティション・キーになるようです。
CassandraではCREATE TABLE時にプライマリー・キーの指定が必須です。
テーブルのプライマリー・キーは、こちらで説明されているCassandraのデータモデルにおける、「ロウ」につける「キー」であると思われます。

Partitioner

さて、ここでパーティション・キーをハッシュにかける役割を担っているのがPartitionerです。「Murmur3Partitioner」「RandomPartitioner」「ByteOrderedPartitioner」の3つがあり、それぞれが異なるハッシュ関数をパーティション・キーに適用します。

Murmur3Partitioner

バージョン3.0でのデフォルトのPartitionerです。後述のRandomPartitionerが暗号化アルゴリズムを利用しているのに対し、こちらはより軽量なアルゴリズムを利用しているため、3~5倍高速にハッシュ値を算出できるようです。どちらを使った場合でも、ノード間のデータの分散は一様になります。

RandomPartitioner

Cassandra 1.2以前のデフォルトのPartitionerです。過去バージョンの互換性のために残されています。MD5ハッシュ関数を利用します。

ByteOrderedPartitioner

こちらも過去バージョンの互換性のために残されています。パーティション・キーの値そのものをハッシュ値として扱います。

Partitionerを一度決定してデータを格納すると、容易に他のPartitionerへの変更はできないようです。過去バージョンのデータを引き継ぐのでなければ、基本的にはバージョン3.0のデフォルトであるMurmur3Partitionerを使っておけば問題ないようです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?