使用 Python 从 Cassandra 获取 50k 记录时出现以下错误。
请问有什么建议吗?
来自服务器的错误:code=1300 [副本执行读取失败] message="操作失败 - 收到 0 个响应和 1 个失败" info={'consistency': 'LOCAL_ONE', 'required_responses': 1, 'received_responses ':0,'失败':1}
如果没有看到您的询问,这个问题很难回答。 从错误消息的外观来看,您的
WHERE
子句过滤器似乎限制不够。 Cassandra 非常适合每秒运行数千次操作,拉回小型结果集。 但是一次查询 50k 行? 没那么多。 特别是当行跨多个分区时。
在 Cassandra 中,您需要设计表来支持您的查询。 如果您不这样做,则会联系多个节点,最终由一个节点协调操作并自行构建整个结果集。 当它变得太大(50k)时,它会超时,这很可能发生在你身上。
将查询分解为更小的查询,以确保每个查询都可以由单个节点完成。 做到这一点的一个好方法是让每个基于键的查询都有自己的线程,限制运行中的线程数量,并使用可监听的 future
await
它们。
哪些字段与您的查询有关。您必须对这些区域建立索引。 例如;
create index target_image_index
on target_image (field name);
如果有人遇到同样的问题,我在我的 datastax astraDb 数据库中发现我只需要稍等一下。我猜这个命令可以工作,但不会告诉你它什么时候完成创建索引,如果你正在查询它并且它还没有启动,则返回一个错误