CQL查询字符串的最大长度是多少?

3

cql 查询字符串有最大长度限制吗?

我计划执行一个类似下面的长查询:select * from table where key in ('abc', 'xyz', ...),并且我估计查询字符串在最坏情况下可能会达到60kB。


1
正如Alex所指出的那样,查询字符串的长度不会成为问题,而60K的IN参数则是一个问题。这被称为“多键查询”,是Cassandra中已知的反模式。之所以如此糟糕,是因为它将不得不选择一个协调器(无论使用哪种负载平衡策略),并且该协调器将不得不访问集群中的每个节点来满足此查询。专业提示:将您的IN参数数量保持在可以用一只手数清楚的范围内。 - Aaron
如果我的上一个评论还不够令人信服,那么我要补充的是,像这样的问题最终会成为Cassandra会议演示文稿中“不要这样做”标题下的一部分。 - Aaron
2个回答

4
根据文档,查询中的参数数量有限制(65535),但字符串长度没有限制。

然而,您需要仔细考虑您的方法 - 在IN中放置少量值是可以的,但是如果过多将会导致麻烦,因为接收您请求的节点(“协调器”)将需要将查询转发到具有您键数据的所有节点,等待结果,将所有内容收集到一个整体,并发送回去。最有可能的是,这将导致协调器节点过载,要么崩溃,要么超时,或者其他问题。

如果使用异步API并行发出请求,则与使用IN相比可以获得更好的性能。


3

在测试过程中,我能够查询长度约为90K的内容,然而在此之后系统开始抛出错误。

根据你读取数据的方式,你可能会在列表中达到65535个项目之前遇到“参数列表过长”的错误。我使用一个仅包含5000个ID的列表(通过cat /proc/sys/kernel/random/uuid创建)就能够重现这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接