gpt4 book ai didi

查询现有数据时 Cassandra ReadTimeout

转载 作者:行者123 更新时间:2023-12-02 23:42:34 26 4
gpt4 key购买 nike

对于我的测试服务器,我有无复制 Cassandra 2.1.6 设置:

CREATE KEYSPACE v2 WITH replication ={'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = false;CREATE TABLE v2.tiles (    zoom int,    idx int,    tile blob,    PRIMARY KEY (zoom, idx))

For each zoom value, there could be tens of millions of small items. For zoom=11, the first idx is in around 100352. When I need to iterate over all items, I allways see this time out error for specific storage cases:

cqlsh:v2> select zoom,idx from tiles where zoom=11 limit 10;
ReadTimeout: code=1200 [Coordinator node timed out waiting for replica nodes' responses] message="Operation timed out - received only 0 responses." info={'received_responses': 0, 'required_responses': 1, 'consistency': 'ONE'}

对于“zoom=11 and idx > 1000”,我收到相同的错误。对于更接近现有项目的 idx 值,它给出正确的结果:

cqlsh:v2> select zoom,idx from tiles where zoom=11 and idx > 100000 limit 10;
zoom | idx
------+--------
11 | 100352
...

当 idx 与极高值进行比较时,它还会显示正确的空结果:

cqlsh:v2> select zoom,idx from tiles where zoom=11 and idx > 1000000 limit 10;                                       
zoom | idx | tile
------+-----+------
(0 rows)

最佳答案

For each zoom value, there could be tens of millions of small items. For zoom=11, the first idx is in around 100352. When I need to iterate over all items, I always see this time out error for specific storage cases.

这听起来像是一个宽行问题。当单个分区有许多项目时(在您的情况下放大),它可能会给 cassandra 中的读取带来问题。一般来说,将分区大小保持在 < 100MB 是一个很好的经验法则,您认为您可能有那么大的分区吗? “tile”列平均有多少字节?例如,idx 是 4 字节 int,假设 blob 大小为 96 字节,每行 100 字节并忽略任何开销 ~1,048,576 行将等于 100MB

虽然页面大小很小,但 cassandra 端仍然有相当多的开销来读取磁盘上的数据及其索引。似乎发生的情况是您的 C* 节点无法读取 read_request_timeout_in_ms 内的数据(默认为 10 秒)。当您的查询有效需要多长时间时?

可能值得启用跟踪(在 cqlsh session 中“TRACING ON”)来帮助了解当查询成功时,到底是什么花了这么长时间。您还可以考虑在调试时将 read_request_timeout_in_ms 增加到任意大的值。可以找到一篇关于追踪的好文章here .

如果您发现行太宽,您可以考虑进一步对数据进行分区,例如按天:

CREATE TABLE v2.tiles (
zoom int,
day timestamp,
idx int,
tile blob,
PRIMARY KEY ((zoom, day), idx)
)

尽管不了解更多关于数据模型的信息,时间可能不是一个好的分区方式。

关于查询现有数据时 Cassandra ReadTimeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31714157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com