如何在Cassandra中为更快的读取建模数据?

时间:2019-07-18 17:21:41

标签: cassandra data-modeling cassandra-3.0

我们已在Cassandra中对数据建模。由于不同系统生成的事件,因此会在数据上连续写入。该表的架构在下面定义。 WRITE在表上工作正常,但使用id的where子句的READ在第99个百分位数上占9s。请帮助我更好地设计这张桌子。数据列包含一个最大2KB的JSON字符串。

CREATE TABLE table (
    id text,
    p1 text,
    o1 text,
    s1 text,
    data text,
    enabled boolean,
    PRIMARY KEY (id, p1, o1, s1)
) WITH CLUSTERING ORDER BY (p1 ASC, o1 ASC, s1 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';
CREATE INDEX table_enabled_idx ON table (enabled);

1 个答案:

答案 0 :(得分:1)

table_enabled_idx索引将非常慢,并最终中断。抛弃它。

LeveledCompactionStrategy将改善读取性能。只有当您从不读取数据或在旧磁盘上恕我直言时,STCS才会更好。将dclocal_read_repair_chance设置为零(虽然确实会有所作为,但也可能会有所作为)。

需要一个痕迹来确定它是否太宽,太多的墓碑等,而您提供的内容并不能告诉您。也可以是来自无关紧要的GC,例如压缩,错误的jvm设置,系统上的其他数据模型等。启用驱动程序上的推测性执行,以解决不常见的GC。