我在cassandra集群中运行查询,在cqlsh中有5个节点。它给了我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的值应该在表中,因为它插入了一个没有给出任何错误的查询。但是在查询时会发生此超时。现在奇怪的事发生了。我试着删除它,它被删除了!因为删除后我尝试选择相同,我得到空的结果。所以它确实存在于某种被破坏的形式导致超时。现在我需要知道这样的事情会发生什么
答案 0 :(得分:1)
检查节点的状态,更改您查询的值会更改拥有该值的节点,因此很可能您的一个节点出现问题,超出的值由该节点拥有。当您更改该值时,新值将由不同的节点拥有,因此它不会超时。
答案 1 :(得分:0)
Re:关于删除成功和损坏问题的更新。
当您使用一致性级别1(如注释中所述)查询和插入时,这肯定会发生。假设密钥空间中的复制因子大于1(通常为3)。 可能是插入过程中某个节点或两个节点出现故障/有时(集群负载,维护问题等) - 复制没有完成任务&数据不是&# 39; t复制到复制的节点。
发生这种情况时,只有修复操作(或根本没有任何操作)可以帮助解决问题。
结果是有1-2个服务器应该持有该行,但实际上没有它,这可能会导致各种奇怪的故障情况。
我没有对超时有一个很好的解释,除非该行有很多列而且它没有完成&#34;及时&#34;
如果再次发生这种情况,请尝试使用limit子句(从1开始,如果可行的话,它可能是一个非常长的查询并且自然会超时。