Hatena::Groupdann

dann's blog このページをアンテナに追加 RSSフィード

Fork me on GitHub

2010-03-09

CassandraのPartitioning

CassandraのPartitioning - dann's blog を含むブックマーク はてなブックマーク - CassandraのPartitioning - dann's blog CassandraのPartitioning - dann's blog のブックマークコメント

パッケージでいうと、org.apache.cassandra.dht。インターフェースでいうと、IPartitioner。

全てのCassandraのノードにTokenが割つけられていて、これらのTokenは、どのキーが、primary replicaに属するのかを決めるために使われている模様。IPartitonerは、キーをTokenに変換して、どのノードにキーが割り当てられているのかを決めるためのインターフェースをもっているよう。キーはTokenに変換可能だけれど、Tokenからキーへの変換はできない(できるケースも有るけれど)

  • RandomPartitioner
    • RandomPartitionerを使うと、Tokenは0から2**127のどれか。キーはTokenとMD5で比較されて、上記の範囲の整数値に変換される。
    • 実装でいうと、RandomPartitionerのgetTokenメソッド。
  • OrderPreservingPartitioner
  • CollatingOrderPreservingPartitioner
    • Range Query使うには、OrderPreservingPartitionerを使う必要あり。

# OrderPreservingPartitionerは、ノードの追加方法にも影響してきそうなので、ここだけみてもちょっとわからないなぁと。Range Queryに絡んでたりと、色々と影響してくるので、もう少し別のところのコードをみてから、再度理解を深めたいところ。