Hatena::Groupdann

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

Fork me on GitHub

2010-03-13

Cassandraのアーキテクチャまとめ

Cassandraのアーキテクチャまとめ - dann's blog を含むブックマーク はてなブックマーク - Cassandraのアーキテクチャまとめ - dann's blog Cassandraのアーキテクチャまとめ - dann's blog のブックマークコメント

Cassandra Architectureに沿って、今までのエントリをまとめておきます。今後、ここにリンクを追記していく予定です。

Cassandra Architecture

その他

TODO

  • Read path
  • deleteの細かい挙動のまとめ
    • Read repaire, hint etc.
  • Compaction
  • Messaging (SEDA実行部分の掘り下げ)
  • APIの網羅
  • Toolを使った運用について

Cassandraでのデータの削除について

Cassandraでのデータの削除について - dann's blog を含むブックマーク はてなブックマーク - Cassandraでのデータの削除について - dann's blog Cassandraでのデータの削除について - dann's blog のブックマークコメント

削除処理の概要

削除するまでに全ノードにその削除通知が行き渡るには時間がかかるので、tombstoneというdeletion markerをつけて、それを使って他のノードにも伝播させることで、他ノードでも削除マークを付ける。

全てのノードで削除マークがつくまでに時間がかかることから、Cassandraでは、inconsistency を低減するために、

  • Hinted Handoff
  • Read Repair
  • Anti Entropy

を使用している。(Hinted Handoff, Read Repair, Anti Entropyの実装とのリンクはまた後ほど。)

tombstoneを設定した後で、実際に削除するのは、GC_GRACE_IN_SECONDSたったときに行われる。ColumnFamily#removeDeletedが実際の処理。これは本当の削除処理。

(GC_GRACE_IN_SECONDESがたって削除されるまでは、削除されたcolumn, super column, column familyを保持しておく必要がある。しかし、中身は不要なので、tombstoneとして扱い、他の削除されたことについて知らないreplicaを修正するためにtombstoneを使う。)

実装

tombstoneの設定の実装

CassandraServerのremoveメソッドが開始部分で、RowMutation#deleteメソッドで実際にtombstoneの設定処理が行われている。

Compactionの実装

CompactionManagerで削除は行われる。

CompactionIteratorのgetReducedメソッドでColumnFamily#removeDeletedが呼ばれている。getReducedメソッドは、CompationIteratorの親クラスであるReducingIteratorのcomputeNext内で呼ばれている。

ReducingIterator <-- CompactionIterator  
CompactionManager -- CompactionIterator