2017-12-28 24 views
0

データを永続化するための要件としてJavaを使用してデータを挿入するCassandra 2.1クラスタが30日間あります。 しかし、これは、墓石のある古いデータを持つファイルがディスクに保存されるため、問題を引き起こします。この結果、必要でないデータによってディスクスペースが占有されます。修復にはこのデータをクリアするのに多くの時間がかかります(単一ノード上で最大3日間) データを削除するより良い方法はありますか?Cassandra - テーブルのTTLとTTLを使用したデータの挿入との違い

私はカサンドラは、あなたがテーブル全体のためDEFAULT_TIME_TO_LIVEプロパティを設定することができますdatastax

でこれに遭遇してきました。通常のTTLでマークされた列と行は、上記のように処理されます。レコードがテーブルレベルのTTLを超えた場合、Cassandraはトムブストーンや圧縮を行わずにすぐに削除します。私は挿入しながら、各時間を設定するのではなく、テーブルレベルでTTLを設定した場合https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlAboutDeletes.html?hl=tombstone

は、データをより効率的に削除されます。 また、ドキュメントはCassandra 3のためのものです。何か利点を得るために新しいバージョンにアップグレードする必要がありますか?

+0

修理ではデータを削除しないでください。本当にTTLの議論に参加するべきではありません。 –

答えて

3

設定は、テーブルのすべての行と列にデフォルトのttlを適用します。個別のttlが設定されていない場合、cassandraはすべてのノードで正しいntp時間を持ちます。

しかし、あなたのアプリケーションではテーブルの1つの行に対して特定のttlを設定できるため、通常の処理が適用されます。一番上に、たとえデータが扱われてもすぐには削除されません - ステルブルはまだ変えられませんが、圧縮中にトゥーンストーンは削除されます。

http://docs.datastax.com/en/archived/cassandra/3.x/cassandra/dml/dmlHowDataMaintain.html#dmlHowDataMaintain__twcs-compaction

TimeWindowCompactionStrategy(のTWC) 時系列とTTLのワークロードを期限切れに推奨: - ちょうど推測 - 本当に多くのことをあなたを助けることができる何

は、適切な締固め戦略だろう。

TimeWindowCompactionStrategy(のTWC)は 簡単な設定でDTCSと同様です。一連の時間枠を使用するTWCSグループSSTables。 コンパクション中、TWCSは、最も最近の時間ウィンドウの 内の圧縮されていないSSTablesにSTCSを適用します。時間窓の終わりにTWCSは、その時間ウィンドウに入るすべてのSSTableをSSTableの最大タイムスタンプに基づいて単一のSSTable にコンパクト化します( )。 の主要なコンパクションが完了すると、データの圧縮はそれ以上行われません。 このプロセスは、次の時間ウィンドウに で書かれたSSTablesで開始されます。

タイムウィンドウを正しく選択すると、これは非常に役立ちます。最後に圧縮されたsstableのすべてのデータは、ほぼ等しいttl値を持ちます(ヒント:順序のずれた挿入や手動ttlを実行しないでください)。 Cassandraはsstableメタデータの中で最も若いttl値を保持し、その時間が経過すると、すべてのデータが廃止されたため、cassandraは単にテーブル全体を削除します。圧縮の必要はありません。

修復はどのように実行しますか?増分?完全?死人?あなたのクラスタはノードとデータの点でどのくらいの大きさですか?

+0

TTLがテーブルレベルで設定されている場合に個別のTTLを無効にできるように、クラスタにデータを書き込むアプリケーションは1つだけです。 transactionIdが主キーであるところにデータを挿入します(約1週間にわたって各キーに約100行あります)。したがって、30日以上経過した行があれば、その行を削除することができます。 LeveledCompactionStrategyを圧縮に使用していますが、TimeWindowCompactionStrategyヘルプに切り替えるのですか? インクリメンタルで修復します。しかし、最近、cronジョブに問題があって、一部のノードで完全な修復を実行していました。 – warrior107

+0

TWCSがあなたのケースで役立つかもしれません - それはしばしば、順不同で挿入されるデータに適しています。私はおそらく一週間の時間枠を示唆しています。だから、35日後には、sstablesの古いデータはなくなります。週のコンパイルはサイズが段階的で、タイムウィンドウの最後には主要なコンパイルが1つあります - スティールの数と読み込みパターンを見てください。修理については、http://cassandra-reaper.io/docs/download/install/をご覧ください。 – Mandraenke

0

迅速な回答は「はい」です。実装方法は、ディスクから直接SStableを削除する方法です。コンパクトにする必要なしにSStableを削除すると、ディスクスペースがより速くクリアされます。しかし、特定のsstableのすべてのデータが、テーブルのグローバルに設定されたTTLよりも「古い」ものであることを確認する必要があります。

これは、引用した段落で言及したfeatureです。それはカサンドラ2.0のために実装されていますので、2.1の部分にする必要があります。

関連する問題