【问题标题】:cassandra sstable files are not getting compacted even when cluster is idle即使集群空闲,cassandra sstable 文件也不会被压缩
【发布时间】:2014-04-13 22:05:10
【问题描述】:

我创建了一个包含 3 个 cassandra 的集群,并创建了一个流程来为集群提供数据。馈送过程对集群造成了相当大的压力,大约 10000 批/秒,并且连续运行了几天。正如预期的那样有效,cassandra 创建了许多 sstable 文件,并且它几乎也不断地压缩这些文件。但是这些文件堆积如山,我目前在 70GB/节点数据库(总共 200GB)上有 300 个。但即使我停止提要并且集群处于空闲状态,它们似乎也不会继续压缩并且文件数量仍然很大。有没有办法强制 cassandra 压缩大部分文件?

我正在使用分级压缩,这是我的一张表:

CREATE TABLE data (
id bigint,
data blob,
PRIMARY KEY (id)
) WITH
bloom_filter_fp_chance=0.100000 AND
caching='KEYS_ONLY' AND
comment='' AND
dclocal_read_repair_chance=0.000000 AND
gc_grace_seconds=864000 AND
index_interval=128 AND
read_repair_chance=0.100000 AND
replicate_on_write='true' AND
populate_io_cache_on_flush='false' AND
default_time_to_live=0 AND
speculative_retry='99.0PERCENTILE' AND
memtable_flush_period_in_ms=0 AND
compaction={'class': 'LeveledCompactionStrategy'} AND
compression={'sstable_compression': 'LZ4Compressor'};

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    运行 nodetool flush 然后运行 ​​nodetool compact 。当 SSTable 增长超过您在 cassandra.yaml 中提到的阈值时,Cassandra 会压缩。默认情况下,每当 sstable 数量增加到 4 个时,它就会被压缩为 1 个。

    【讨论】:

    • 我目前有大约 100 个 sstables 用于上述表格,不应该压缩吗?
    • 然后单独为特定列族运行压缩。拥有更大的 SSTable 也不会改善您的读取操作。只要您的架构正确,拥有 100 个或更多的 sstables 不会影响您的读取性能...
    • 啊,真的不会影响性能吗?是不是又因为布隆过滤器?
    • 随着我的数据变大,我的读取性能越来越差。我目前在 200GB 的 3 个节点上每秒进行 250 次查询(节点在同一个盒子上运行,但不同的 7200rpm 磁盘,盒子有 16 个内核)。上表是我的两个主表之一,另一个是我们讨论过的时间序列表,我相信我已经优化了:stackoverflow.com/questions/22792260/…
    • 您正在生成一个唯一 ID 并运行此查询。这意味着您正在填充 SQL 之类的数据。请根据 nosql 来考虑模式。如果您正在增长一百万或十亿行,我觉得您的设计必须针对 Facebook 这样的数据进行扩展。
    猜你喜欢
    • 2014-04-24
    • 2020-07-11
    • 1970-01-01
    • 2018-08-23
    • 2020-03-28
    • 2018-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    相关资源
    最近更新 更多