Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/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 - Fatal编程技术网

Cassandra 卡桑德拉的阅读错误

Cassandra 卡桑德拉的阅读错误,cassandra,Cassandra,我试图从Cassandra表读取数据时出错。我有一个单节点安装,默认设置。这是我的疑问: SELECT component_id, reading_1, reading_2, reading_3, date FROM component_readings WHERE park_id=2 AND component_id IN (479) AND date >= '2016-0

我试图从Cassandra表读取数据时出错。我有一个单节点安装,默认设置。这是我的疑问:

  SELECT component_id,
         reading_1,
         reading_2,
         reading_3,
         date
  FROM component_readings
  WHERE park_id=2
        AND component_id IN (479)
        AND date >= '2016-04-09+0000'
        AND date <= '2016-05-08+0000';
对于一些
组件id
值,它工作,而对于另一个值,它失败。这就是我得到的错误:

cassandra.ReadFailure: code=1300 [Replica(s) failed to execute read] 
message="Operation failed - received 0 responses and 1 failures"
info={'required_responses': 1, 'received_responses': 0, 'failures': 1,
'consistency': 'LOCAL_ONE'}
cassandra的system.log显示了这个错误:

ERROR [SharedPool-Worker-1] 2016-05-09 15:33:58,872 StorageProxy.java:1818 - 
Scanned over 100001 tombstones during query 'SELECT * FROM xrem.component_readings
WHERE park_id, component_id = 2, 479 AND date >= 2016-04-09 02:00+0200 AND date <=
2016-05-08 02:00+0200 LIMIT 5000' (last scanned row partion key was ((2, 479),
2016-05-04 17:30+0200)); query aborted
错误[SharedPool-Worker-1]2016-05-09 15:33:58872 StorageProxy.java:1818-
在查询“从xrem.component\u读数中选择*时扫描了100001个墓碑

如果驻车id、部件id=2479且日期>=2016-04-09 02:00+0200且日期则超过了
墓碑故障\u阈值
。它默认为100000。你也可以

  • 增加cassandra.yaml中的值或
  • 清理你的墓碑
要在表格中执行后一项操作,请将gc_grace_seconds设置为0:

ALTER TABLE component_readings WITH GC_GRACE_SECONDS = 0;
然后通过nodetool触发压缩。这将冲掉所有墓碑


在单节点集群的特定场景中,可以将GC_GRACE_秒保持为零。但如果您这样做了,请记住,如果您想要使用多个节点,请撤消此操作

如果在请求中将一致性级别设置为仲裁,会发生什么情况?相同的问题:
cassandra.ReadFailure:code=1300[副本未能执行读取]message=“操作失败-收到0个响应和1个失败”info={'received_responses':0,'failures':1,'required_responses':1,'consistency':'quorum'}
您只有一个副本?是。正如我所说,这是一个单节点安装。如果这真的是一个墓碑问题,你看了吗?但是如果问题是墓碑问题,那么如果我从cqlsh启动它并从外部程序失败,为什么查询工作?这对我来说毫无意义(顺便说一句,这个解决方案可行,但我不明白为什么)。@CésargaríaTapia,是的,我同意这很奇怪。目前有一些关于不一致的墓碑计数/行为或其他影响3.x分支的问题尚未解决。也许你受到了这样的影响?您可能会提出错误通知单。我观察到类似的不一致性:查询在
分页关闭时失败,但在
分页打开时正确完成<代码>显示版本
:cqlsh 5.0.1 | Cassandra 3.11.5 | CQL spec 3.4.4 |本机协议v4。如果您处理的是物化视图,则无法将其设置为0;但是你仍然可以将它设置为一个较低的值,比如说10秒。。。。。。。。。您将收到类似“InvalidRequest:Error from server:code=2200[Invalid query]message=“无法将物化视图的基表的gc\u grace\u seconds更改为0,因为此值用于TTL未送达的更新。将gc\u grace\u seconds设置得过低可能会导致未送达的更新在重播之前过期。”
ALTER TABLE component_readings WITH GC_GRACE_SECONDS = 0;