【发布时间】:2016-03-03 08:52:49
【问题描述】:
我在 cqlsh 中有 5 个节点的 cassandra 集群中运行查询。它给了我 OperationTimedOut 错误。如果我对 where 子句参数进行轻微修改,它会给我空的结果。这是预期的。即使我更改参数的单个字符也没关系,但完全相同的参数值让我超时。为什么会这样?
查询:
select * from table where pid = '5f334fef-2629-484c-a081-c4a6f554c6ab'
这是表架构
CREATE TABLE dmp.interest_data (
pid text,
attribute text,
country text,
day_count int,
first_seen timestamp,
flag int,
keys set<text>,
last_seen timestamp,
score int,
usage_count int,
PRIMARY KEY (pid, attribute)
) WITH CLUSTERING ORDER BY (attribute ASC)
AND bloom_filter_fp_chance = 0.01
AND caching = '{"keys":"ALL", "rows_per_partition":"NONE"}'
AND comment = ''
AND compaction = {'min_threshold': '4', 'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy', 'max_threshold': '32'}
AND compression = {'chunk_length_kb': '256', 'sstable_compression': 'org.apache.cassandra.io.compress.LZ4Compressor'}
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 172800
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.1
AND speculative_retry = '99.0PERCENTILE';
CREATE INDEX interest_data_attribute_idx ON dmp.interest_data (attribute);
CREATE INDEX interest_data_country_idx ON dmp.interest_data (country);
CREATE INDEX interest_data_day_count_idx ON dmp.interest_data (day_count);
CREATE INDEX interest_data_first_seen_idx ON dmp.interest_data (first_seen);
CREATE INDEX interest_data_usage_count_idx ON dmp.interest_data (usage_count);
更新: where 子句中提到的 pid 的值应该存在于表中,因为它是通过没有给出任何错误的查询插入的。但是在查询它时会发生此超时。现在奇怪的事情发生了。我试过删除它,它被删除了!!!因为删除后我尝试选择相同的结果,但结果为空。因此,确实存在只是以某种损坏的形式导致超时。现在我需要知道这样的事情是怎么发生的
【问题讨论】:
-
5 个二级索引?需要注意的是,二级索引在 Cassandra 中是一种反模式。
-
好的。你能多解释一下吗?这真的可以帮助我
-
Aaron 对二级索引的警告是正确的。但我认为这不是问题所在。当您说更改 where 子句参数时,您是什么意思?您更改 '5f334fef-2629-484c-a081-c4a6f554c6ab' 的值?你期望这个值有一些结果吗?你用这个 pid 插入了多少个属性?
-
超时时你的查询是什么?
-
@DineMartine 请查看更新后的问题
标签: cassandra