1

列ファミリー gcgraceseconds を 0 に設定しました。それでも行キーは削除されず、列ファミリーに残ります

create column family workInfo123
with column_type = 'Standard'
  and comparator = 'UTF8Type'
  and default_validation_class = 'UTF8Type'
  and key_validation_class = 'UTF8Type'
  and read_repair_chance = 0.1
  and dclocal_read_repair_chance = 0.0
  and populate_io_cache_on_flush = true
  and gc_grace = 0 
  and min_compaction_threshold = 4
  and max_compaction_threshold = 32
  and replicate_on_write = true
  and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
  and caching = 'KEYS_ONLY'
  and default_time_to_live = 0
  and speculative_retry = 'NONE'
  and compression_options = {'sstable_compression' : 'org.apache.cassandra.io.compress.LZ4Compressor'}
  and index_interval = 128;

以下のビューを参照してください

[default@winoriatest] list workInfo123;
Using default limit of 100
Using default cell limit of 100
-------------------
RowKey: a
-------------------
RowKey: xx

2 Rows Returned.
Elapsed time: 17 msec(s).

私は cassandra -cli を使用しています

アップデート:-

使用後./nodetool -host 127.0.0.1 compact

[default@winoriatest] list workInfo123;
Using default limit of 100
Using default cell limit of 100
-------------------
RowKey: xx

2 Rows Returned.
Elapsed time: 11 msec(s).

なぜxx残っているのですか??

4

2 に答える 2

5

Cassandra で行を削除しても、すぐには削除されません。代わりに、墓石でマークされています。その結果、キーの結果は得られますが、列は配信されません。墓石が必要な理由

  1. Cassandra データ ファイルは、「いっぱい」になると読み取り専用になります。トゥームストーンは、削除された行を含む現在開いているデータ ファイルに追加されます。
  2. 行のコピーを保持しているすべてのノードに削除を伝播する機会をクラスターに与える必要があります。

行とその墓石を削除するには、圧縮が必要です。このプロセスはデータ ファイルを再編成し、その間に削除された行を整理します。つまり、tombstone の GC 猶予期間に達した場合です。単一ノード (!) クラスターの場合、猶予期間を 0 に設定しても問題ありません。これは、削除を他のノード (削除を発行した時点でダウンしている可能性がある) に伝達する必要がないためです。

削除された行を強制​​的に削除したい場合は、nodetool ユーティリティを使用して、フラッシュ (メモリをデータ ファイルと同期) とメジャー コンパクションをトリガーできます。例えば

./nodetool flush your_key_space the_column_family && ./nodetool compact your_key_space the_column_family

圧縮が完了すると、削除された行は完全になくなるはずです。

于 2014-01-15T09:35:20.110 に答える
1

行キーをすぐに削除するために、デフォルトの GC 猶予期間は 10 日間 (つまり 846000 秒) です。

UPDATE COLUMN FAMILY column_family_name with GC_GRACE= 0;

上記の cli クエリを実行し、nodetool のフラッシュおよびコンパクト操作に従います。

于 2014-07-01T12:38:40.843 に答える