1

Cassandra から行を削除しても、データがまだ memtable に残っている場合 (SSTable はまだ作成されていません)、削除された行は memtable でクリーンアップされないように見えます。なぜなら、削除された行は memtable でクリーンアップされていないように見えます。 SSTable。SSTableにフラッシュする前に、memtable自体から削除された行を完全にクリーンアップできる方法はありますか? 更新は行われていますが、削除は行われていないようです。

Cassandra 2.0.8 を使用しています。

ありがとう

4

1 に答える 1

3

RF > 1 の場合でも、削除がすべてのレプリカに安全に送信されたことを確認するために、トゥームストーンをディスクに永続化する必要があります。たとえば、次のことを考慮してください。

RF = 3 N = 3

月末に解雇する従業員のテーブルがあります。解雇する従業員のリストに John Smith を追加します。2 分後、John Smith が素晴らしいことをしたので、あなたは彼をリストから削除したいと考えています。あなたは彼のエントリを削除しましたが、3 つのノードの 1 つがオフラインです。John Smith は、そのオフライン ノードで解雇する従業員のリストにまだ残っています。

memtable が「稼働中」のノードの 1 つでフラッシュすると、John Smith を起動してはならないことを示す tombstone が永続化されます。これは、そのオフライン サーバーが起動したときに、John Smith のジョブが安全であることを知る必要があるためです。

圧縮は最終的に gc_grace_seconds の後にトゥームストーンを削除しますが、基本的な動作は正しいです: セルを書き込んですぐに削除する場合、すべてのレプリカが確実にそのセルを適切に削除するために、トゥームストーンをディスクに保存する必要があります。

于 2015-04-25T21:04:11.357 に答える