Cassandra是否有限制可以向Session.executeAsync
提交多少查询?如果我有一百万个select语句,我可以在executeAsync
循环中为所有这些语句调用for
。但我无法分辨出幕后发生了什么。 Cassandra会自动批量拨打电话吗?它开始失败了吗?
这取决于所使用的协议版本和向主机打开的连接数。 V2协议支持每个连接128个飞行中请求,V3允许每个连接32k个请求(默认值为1000)。您可以在创建群集对象时使用PoolingOptions.setMaxRequestsPerConnection对其进行配置。
但是,根据飞行中请求的数量,您不能通过每个主机的连接数简单地使用多个主机,并将其用作最大数量 - 它是最大理论限制,但可能是某些节点应处理的请求多于其他节点的情况,并且很容易超越特定节点的限制。您可以在Java driver's documentation中找到有关连接池的更多信息。
最好选择一些最大数量,并使用信号量不提交超过此限制的更多请求。你可以找到here的一个例子。