Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Cassandra中创建模型数据以实现更快的读取?_Cassandra_Data Modeling_Cassandra 3.0 - Fatal编程技术网

如何在Cassandra中创建模型数据以实现更快的读取?

如何在Cassandra中创建模型数据以实现更快的读取?,cassandra,data-modeling,cassandra-3.0,Cassandra,Data Modeling,Cassandra 3.0,我们用Cassandra对数据进行了建模。由于不同系统生成的事件,在数据上会发生连续写入。表的架构定义如下。写操作在表上可以很好地工作,但使用id的where子句进行读取在第99百分位上最多需要9秒。请帮助我更好地设计这张桌子。数据列包含一个最大为2KB的JSON字符串 CREATE TABLE table ( id text, p1 text, o1 text, s1 text, data text, enabled boolean, P

我们用Cassandra对数据进行了建模。由于不同系统生成的事件,在数据上会发生连续写入。表的架构定义如下。写操作在表上可以很好地工作,但使用id的where子句进行读取在第99百分位上最多需要9秒。请帮助我更好地设计这张桌子。数据列包含一个最大为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\u enabled\u idx
索引将非常缓慢,最终会中断。别管了

LeveledCompactionStrategy将完全提高读取性能。只有当你从未读过数据或在古老的磁盘上时,STC才会更好。将
dclocal\u read\u repair\u chance
设置为零(实际上不会有什么区别,但也可以)


需要一个跟踪,以确定它是否是其他东西,如太宽,太多的墓碑等,你所提供的没有告诉。也可以是来自不相关事物的GCs,如压缩、坏jvm设置、系统上的其他数据模型等。如果GCs很少出现,则允许在驱动程序上进行推测性执行。

您能提到占用时间最多的读取查询吗?同样好的是,您已经提到了“数据”列的大小,但是您还可以估计一个特定的“id”键将显示多少行。我们可以用它来查看分区大小。现在行数接近160万。这就是查询的样子。这是正在激发的唯一一个id值不同的查询。从id为'961:3387:2019-06-30'的表格中选择*;摆脱索引的好主意。极低基数列上的二级索引将很快变宽,并最终变得无用。我可以想象,您选择的分区键会导致巨大的分区。但只是一个猜测。你能提供nodetool表格直方图的输出吗?