2016-06-16 12 views
1

最近、私はCassandraに慣れようとしていますが、データが削除された後にいつディスクからデータが削除されるのかはよく分かりません。私が特に興味を持っているユースケースは、DTCSで時系列データを期限切れにすることです。例として、以下の表を考えてみます。カッサンドラはいつ削除された後にデータを削除しますか?

CREATE TABLE metrics (
    metric_id text, 
    time timestamp, 
    value double, 
    PRIMARY KEY (metric_id, time), 
) WITH CLUSTERING ORDER BY (time DESC) AND 
    default_time_to_live = 86400 AND 
    gc_grace_seconds = 3600 AND 
    compaction = { 
     'class': 'DateTieredCompactionStrategy', 
     'timestamp_resolution':'MICROSECONDS', 
     'base_time_seconds':'3600', 
     'max_sstable_age_days':'365', 
     'min_threshold':'4' 
    }; 

私はカサンドラは、24時間(86400秒)の後に、このテーブルに挿入されたすべての行のための墓石を作成することを理解しています。これらの墓石は、まずメモリ内のMemtableに書き込まれ、Memtableが特定のサイズに達するとSSTableとしてディスクにフラッシュされます。私の質問は、現在期限切れになっているデータをいつディスクから削除するのかということです。データを含むSSTableが次に圧縮されるのはいつですか?したがって、DTCSとmin_thresholdが4に設定されている場合、少なくとも3つの他のSSTableが期限切れのデータと同じ時間枠になるまで待ってから、それらのSSTablesはSSTableに圧縮されます。この圧縮中にデータが削除されますか?これは、カサンドラが、新しい墓石が圧縮されている古いSSTablesにはない可能性が高いため、行が削除されたメタデータを維持することを要求しているようです。

また、削除するデータの有効期限切れのデータを含むSSTablesで廃棄記号を含むSSTablesを圧縮する必要がありますか?これは、古い賞味期限のデータで新しい墓石が圧縮されるのを待っているので、期限切れのデータを保持しているカサンドラに帰結する可能性があります。

最後に、私はまた、墓石自体が取り除かれたときには不安でした。私はCassandraがgc_grace_secondsの後までそれらを削除しないことを知っていますが、期限切れのデータが削除されたことを確かめるまで、墓石は削除できません。そうしないと、有効期限切れのデータが有効であると見なされます。その結果、墓石が削除される時の問題は、上記の質問に密接に結びついているように思えます。ありがとう!

私はバージョン2.0.15を自分で試してみました。

答えて

2

カッサンドラのデータを確実に削除するには、2通りの方法があります。

1:gc_grace_secondsの有効期限が切れたとき。あなたのテーブルでは、gc_grace_secondsは3600に設定されています。これは、行にdelete文を実行するときに意味します。すべてのクラスタからデータが確実に削除されるまでには、3600秒待たなければなりません。

2:コンパクション中に、カッサンドラはトムストーンでマークされたすべてのデータを探し、単に新しいSSTableを書き込むときにそれを無視して、新しいSSTableがデータを削除していないことを確認します。

しかし、ノードがダウン長いgc_grace_seconds以上または圧縮時に行く、あなたは私が私が持っていたことに気づきました他の人からいくつかのさらなる研究と助けた後Cassandra documentation.

+0

ありがとう、ウィル!2番目の点を明確にするために、期限切れのデータは、それが圧縮されている他のSSTablesに廃棄墓石が含まれているかどうかにかかわらず、その中のSSTableが圧縮されると削除されますか?その場合、Cassandraは削除するデータを知るためにSSTableの外で削除された行を追跡する必要があります。また、DTCSでは、他の3つのSSTableがSSTableと同じ時間枠内にあり、期限切れのデータが圧縮されるまで待つ必要がありますか?もしそうなら、24時間以上かかることがあるようです。 – jeromefroe

+0

あなたの2つのケースは実際には1つです。大きな圧縮は 'gc_grace_seconds'を超えたすべての削除されたデータを削除します。 [このスレッド](http://stackoverflow.com/questions/23346698/should-compaction-within-gc-grace-seconds-preserve-tombstones/23361873#23361873)も参照してください。 – Ralf

+0

こんにちはラルフ、助けてくれてありがとう!私は、しかし、マイナーコンパクションにもっと関心があります。大きな圧縮では、Cassandraはすべてのデータを圧縮しているため、期限切れのデータを含むSSTableと、墓石を持つSSTableは必然的に圧縮されます。ただし、小さな圧縮では、SSTablesがDTCSがそれらをまとめてコンパイルするのと同じ時間ウィンドウにない可能性があるため、これは当てはまりません。 – jeromefroe

1

でより多くの情報を見つけること起こるかもしれません私の元の質問のいくつかの誤解。具体的には、「TTLで削除されたデータは、削除を発行するのと同じではありません - 期限切れの各セルは内部的にttl/timestampを持ち、tombstoneに変換されますmemtableに追加された墓石がないか、そのタイムスタンプを過ぎてしまえば、失効したセルを墓石として扱うだけです」

さらに、Cassandraは、memtableがディスクにフラッシュされ、マイナーコンパクションが実行されたときに期限切れのデータのみを含むSSTablesを削除できるかどうかをチェックします。ただし、(see this issue)でも10分ごとに1回しか実行されません。あなたが私と同じ質問をしてくれたら助かります。

関連する問題