如何在 Cassandra 中建模数据以加快读取速度?
How do model data in Cassandra for faster reads?
我们已经在 Cassandra 中对数据进行建模。由于不同系统生成的事件,数据会不断写入。 table 的模式定义如下。 WRITE 在 table 上工作正常,但使用 id 的 where 子句的 READ 在第 99 个百分位数上最多需要 9s。请帮助我更好地设计这个 table。数据列包含一个最大 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);
table_enabled_idx
索引将非常缓慢并最终中断。放弃它。
LeveledCompactionStrategy 将彻底提高读取性能。 STCS 只有在您从不阅读数据或从不阅读古老的磁盘恕我直言时才会更好。将 dclocal_read_repair_chance
设置为零(不会真正产生影响,但也可以)。
需要跟踪来确定它是否有其他问题,例如太宽、墓碑太多等您提供的内容没有说明。也可以是来自不相关事物的 GC,例如压缩、错误的 jvm 设置、系统上的其他数据模型等。如果 GC 不频繁,则在驱动程序上启用推测执行以解决 GC。
我们已经在 Cassandra 中对数据进行建模。由于不同系统生成的事件,数据会不断写入。 table 的模式定义如下。 WRITE 在 table 上工作正常,但使用 id 的 where 子句的 READ 在第 99 个百分位数上最多需要 9s。请帮助我更好地设计这个 table。数据列包含一个最大 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);
table_enabled_idx
索引将非常缓慢并最终中断。放弃它。
LeveledCompactionStrategy 将彻底提高读取性能。 STCS 只有在您从不阅读数据或从不阅读古老的磁盘恕我直言时才会更好。将 dclocal_read_repair_chance
设置为零(不会真正产生影响,但也可以)。
需要跟踪来确定它是否有其他问题,例如太宽、墓碑太多等您提供的内容没有说明。也可以是来自不相关事物的 GC,例如压缩、错误的 jvm 设置、系统上的其他数据模型等。如果 GC 不频繁,则在驱动程序上启用推测执行以解决 GC。