如何从cassandra中删除数据

时间:2018-04-24 12:08:17

标签: cassandra cql

我使用的是Cassandra 3.6数据库,表定义是这样的。

CREATE TABLE sg.products (
    date_updated text,
    time_added int,
    id text,
    best_seller text,
    company text,
    PRIMARY KEY (date_updated, time_added, id)
) WITH CLUSTERING ORDER BY (time_added ASC, id ASC)
    AND bloom_filter_fp_chance = 0.01
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'}
    AND comment = ''
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'}
    AND crc_check_chance = 1.0
    AND dclocal_read_repair_chance = 0.1
    AND default_time_to_live = 0
    AND gc_grace_seconds = 864000
    AND max_index_interval = 2048
    AND memtable_flush_period_in_ms = 0
    AND min_index_interval = 128
    AND read_repair_chance = 0.0
    AND speculative_retry = '99PERCENTILE';

表有数百万个数据。

在“products”表中,我删除了best_seller列,成功删除了列。 但是当我检查空间盘时,它没有判定,

所以我点击谷歌上的查询,我发现这个词“墓碑”,

所以Cassandra没有删除数据,有点保存到墓碑中。

现在我的问题是如何删除墓碑数据?所以我可以保存内存。

或者有什么办法可以节省内存吗?

提前致谢。

2 个答案:

答案 0 :(得分:3)

Tombstones drop 只有在数据所属的表上定义的local_delete_time + gc_grace_seconds之后,Cassandra才会在压缩触发时完全删除这些逻辑删除。请记住,所有节点都应该在gc_grace_seconds内修复,以确保正确分布逻辑删除并防止删除的数据重新出现。

答案 1 :(得分:2)

从表格定义中查看此行:

AND gc_grace_seconds = 864000

这是墓碑生存的时间段。 864000秒== 10天。在此期间存在逻辑删除,以便有足够的时间将其分发到群集中的其他节点。这样,所有其他节点都知道删除,并且不返回过时的值。

一旦10天过去了,下次此表触发压缩(在10天之后),墓碑将被删除。

请注意,您可以通过修改表定义中的该属性来缩短该时间段。只需确保您在该时间范围内运行维修。