2014-01-15 82 views
1

我將我的列族gcgraceseconds設置爲0; 但劇照rowkey不會被刪除,它仍然在我的專欄的家人從cassandra cli刪除行鍵

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; 

看到的

[[email protected]] 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). 

認爲下面我使用卡桑德拉-cli 我是不是應該改變任何東西

UPDATE : -

使用後./nodetool -host 127.0.0.1 compact

[[email protected]] list workInfo123; 
Using default limit of 100 
Using default cell limit of 100 
------------------- 
RowKey: xx 

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

爲什麼xx仍然是??

+0

因此,鍵仍然出現,但刪除行後列不見了?在運行'nodetool flush '和'nodetool compact '後,該行是否完全消失? – Ralf

+0

'nodetool'是'/bin'中它自己的程序。它不是'cassandra-cli'命令。 – Ralf

+0

@Ralf'./nodetool flush winoriatest workInfo123'和'./nodetool -host 127.0.0.1 compact'壓縮表,但'rowkey xx'仍然存在,但'rowkey a'消失了。 'rowkey a'是三四天大的條目,那麼'rowkey xx'是否會因爲這個而發生? –

回答

5

當您在Cassandra中刪除一行時,它不會立即被刪除。相反,它被標記爲墓碑。效果是,你仍然得到關鍵的結果,但沒有列將被傳遞。該墓碑是必需的,因爲

  1. Cassandra數據文件在「完整」後變爲只讀;墓碑將添加到當前打開的包含已刪除行的數據文件中。
  2. 您必須爲羣集提供一個將刪除行爲傳播給所有擁有該行副本的節點的機會。

對於要刪除的行及其墓碑,需要壓縮。這個過程重新組織數據文件,當它這樣做時,它會修剪已刪除的行。也就是說,如果墓碑的GC寬限期已經達到。對於單節點(!)羣集,可以將寬限期設置爲0,因爲刪除不必傳播到任何其他節點(在您發出刪除的時間點可能會停止)。

如果要強制刪除已刪除的行,可以通過nodetool實用程序觸發刷新(包含數據文件的同步內存)和主要壓縮。例如。

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

壓縮完成後,刪除的行應該真正消失。

1

默認GC寬限期十天(意味着846000秒),以除去rowkey立即

UPDATE COLUMN FAMILY column_family_name with GC_GRACE= 0; 

執行上述CLI查詢跟隨nodetool沖洗和壓縮操作。