Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Leveled compaction

1,845 views

Published on

第23回Cassandra勉強会 Leveled Compactionについて

  • Be the first to comment

Leveled compaction

  1. 1. Leveled Compactionについて 株式会社INTHEFOREST 関 あつお
  2. 2. Compactionとは• memtable上のデータをflushしてSSTableを 作成した後、他のSSTableとマージしてま と める機能 SSTable flush marge SSTable SSTable memtable SSTable
  3. 3. 標準として使用されている Compaction SizeTiered Compaction• 大体同じ大きさのSSTableが4つになった 時 これをマージして一つのSSTableを作成す る
  4. 4. SizeTiered Compactionの問題点• 複数のSSTableに欲しいデータが点在する場合 各SSTableを読み込まなければならない• よくデリートされるデータは得に複数のSSTableにデータが存在する 為 多く読み込みに行かなければならない• 巨大なSSTable同士のCompactionは重いし 作業領域も大量に取らなければならない
  5. 5. 1.0から登場した Leveled Compaction• Leveled Compaction は GoogleのLevelDBをベースに作られたCompaction• レベル0~8までの領域を使い、追加、更新されたデータを 新しい順に若いレベルに保持する構造• レベルごとに保持しているキーの重複を無くす事で欲しいキーの情報など は レベルごとのSSTableを見るだけで済むようにしている• Compactionに必要な作業領域は繰り返すほど大きくはならず 大体は設定するSSTableの大きさの10倍の領域 (sstable_size_in_mb * 10) で済みます Level 1 Level 0 Level 2 Level 3
  6. 6. Leveled Compaction の動き(1)• memtableからデータがflushされSSTableが作られた時、それをLevel 0として 扱う• Level 0のSSTableは即座に CFのオプションで設定できるsstable_size_in_mbの 量に分けられたりマージされたりして Level 1 に置かれる (sstable_size_in_mb の デフォルトは5MB) Level 0 Level 1 split or marge 3 2 1 flushmemtable SSTable Level 2 Level 3
  7. 7. Leveled Compaction の動き(2)• レベル1として置かれたSSTableの合計がsstable_size_in_mb の 10倍に達し 次に新しいキー、カラムのデータが入ってきた場合は古いデータ順に Level 1 のデータを Level 2 に置く Level 1 SSTable 5 4 3 Level 2 2 1 Level 3
  8. 8. Leveled Compaction の動き(3)• Level 2 はさらに10倍 (sstable_size_in_mb が 5 なら 500MB) にLevel 2 の SSTableの合計が達した場合、次はLevel 2 から Level 3 へデータが置かれる• Level 3 はさらに10倍 とLevelの許容量は10倍づつ上がっていく Level 1 SSTable 12 11 9 Level 2 8 7 6 5 4 3 2 Level 3 1
  9. 9. Leveled Compaction の動き(4)• レベルに入っているキーと同じキーのデータが入ってきた場合 そのデータは同じSSTableにキーが重複されないようマージされる• また、データを入れると入ったLevelにあるSSTableはデータのバランスを 取ったりする為、全体を更新する事が多々ある キー9と3が入った場合 Level 1 9はマージされ 9 3 9 3 12 3はレベル2にも存在してい るがレベルが違うのでそのま ま入る Level 2 11 8 7 6 5 4 3 Level 3 2 1
  10. 10. 実際の使い方• create column family (CF名) with compaction_strategy=LeveledCompactionStrategy and compaction_strategy_options={sstable_size_in_mb: (MB数)}• update column family (CF名) with compaction_strategy=LeveledCompactionStrategy and compaction_strategy_options={sstable_size_in_mb: (MB数)}
  11. 11. SSTableのレベルを見るには• SSTableを保持しているディレクトリに (CF名).json が あり SSTableの番号なんかが書かれてある 中見はこんな感じ { "generations" : [ { "generation" : 0, "members" : [ ] }, { "generation" : 1, "members" : [ 13, 14, 15, 16, 17 ] }, { "generation" : 2, "members" : [ 11 ] }, { "generation" : 3, "members" : [ ] ~~~~~~~~~~~~~~~~~~~~~~~
  12. 12. 個人的な懸念点• compression_option でSSTableを圧縮する設定だと 圧縮によっては各レベルのファイル数が爆裂• 1.1.1のバージョンはレベル0のSSTableが 処理されなかったりして増え続けるバグが存在 (1.0.10だとFix済み)
  13. 13. ご清聴ありがとうございました

×