【发布时间】:2019-02-21 22:28:12
【问题描述】:
Cassandra 对可以向Session.executeAsync 提交的查询数量是否有限制?如果我有一百万个 select 语句,我可以在 for 循环中为所有这些语句调用 executeAsync。但我无法说出引擎盖下发生了什么。 Cassandra 会自动批处理调用吗?它开始失败了吗?
【问题讨论】:
Cassandra 对可以向Session.executeAsync 提交的查询数量是否有限制?如果我有一百万个 select 语句,我可以在 for 循环中为所有这些语句调用 executeAsync。但我无法说出引擎盖下发生了什么。 Cassandra 会自动批处理调用吗?它开始失败了吗?
【问题讨论】:
这取决于所使用的协议版本和向主机打开的连接数。 V2 协议支持每个连接 128 个进行中的请求,而 V3 允许每个连接 32k 个请求(尽管默认为 1000 个)。您可以在创建集群对象时使用PoolingOptions.setMaxRequestsPerConnection 进行配置。
但是您不能简单地按每个主机的连接数和进行中的请求数来计算多个主机并将其用作最大数量 - 这是最大的理论限制,但可能是某些节点应该处理更多的情况请求比其他请求,并且很容易超过特定节点的限制。您可以在Java driver's documentation 中找到有关连接池的更多信息。
最好选择一些最大数量,并使用信号量提交的请求数不要超过此限制。您可以找到here 的一个示例。
【讨论】: