美文网首页
十 hugegraph 手动清理cassandra 墓碑

十 hugegraph 手动清理cassandra 墓碑

作者: NazgulSun | 来源:发表于2019-11-04 15:21 被阅读0次

    hugegraph数据基本存在 graph_edges_in; graph_edges_out, graph_vertices, graph_secondary_indexes 中
    大量手动删除数据在 cassandra 是不推荐的, 删除的数据通常会已墓碑的形式存在, 查询的时候过滤调,实际是个逻辑删除。(为啥需要墓碑,可以参考本文 https://www.jianshu.com/p/ce1bc6926085
    主要的思路就是处理分布式删除中的一致性问题,
    比如有三个节点, a,b,c。 现在要删除person 老罗。
    a,b 都删除了,这个时候 c 挂了。老罗没有删除。
    当c 恢复的时候, 整个集群会认为 老罗是新数据, 又复制到了a,b, 这个称之为僵死数据。
    cassandra处理方式,是a,b 删除后,标记为老罗 已经被删除,有个墓碑。
    c起来后,看到老罗是墓碑数据,就知道是要删除的。

    但是墓碑不能一直存在数据库里面, 过了一定的时间之后,系统会自己清除 tombstone。

    以 graph_secondary_indexes 为例,

    cqlsh:industrychain> describe graph_secondary_indexes;

    CREATE TABLE industrychain.graph_secondary_indexes (
    field_values text,
    index_label_id int,
    element_ids text,
    PRIMARY KEY (field_values, index_label_id, element_ids)
    ) WITH CLUSTERING ORDER BY (index_label_id ASC, element_ids 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';

    gc_grace_seconds 默认为 10天,也就是墓碑会保留10天。

    我们需要 设置为 0
    alter table graph_secondary_indexes with GC_GRACE_SECONDS =0;

    然后在 bin目录下使用nodetool工具;
    Nodetool compact

    执行完之后,需要把 时间设置回来原
    alter table graph_secondary_indexes with GC_GRACE_SECONDS =864000;

    相关文章

      网友评论

          本文标题:十 hugegraph 手动清理cassandra 墓碑

          本文链接:https://www.haomeiwen.com/subject/fordbctx.html