Session.executeAsync 的查询限制是多少?
What is the query limit for Session.executeAsync?
Cassandra 是否对可以提交给 Session.executeAsync
的查询数量施加了限制?如果我有一百万个 select 语句,我可以在 for
循环中为所有这些语句调用 executeAsync
。但我无法说出幕后发生的事情。 Cassandra 会自动批处理呼叫吗?它开始失败了吗?
这取决于使用的协议版本和对主机打开的连接数。 V2 协议支持每个连接 128 个飞行中请求,而 V3 允许每个连接 32k 个请求(尽管默认值为 1000)。您可以在创建集群对象时使用PoolingOptions.setMaxRequestsPerConnection配置它。
但是您不能简单地将主机数量乘以每个主机的连接数量乘以运行中的请求数量并将其用作最大数量——这是最大的理论限制,但在某些情况下,某些节点应该处理比其他请求更多的请求,并且很容易超过特定节点的限制。您可以在 Java driver's documentation.
中找到有关连接池的更多信息
最好select一些最大数量,并使用信号量提交不超过此限制的请求。您可以找到一个示例 here。
Cassandra 是否对可以提交给 Session.executeAsync
的查询数量施加了限制?如果我有一百万个 select 语句,我可以在 for
循环中为所有这些语句调用 executeAsync
。但我无法说出幕后发生的事情。 Cassandra 会自动批处理呼叫吗?它开始失败了吗?
这取决于使用的协议版本和对主机打开的连接数。 V2 协议支持每个连接 128 个飞行中请求,而 V3 允许每个连接 32k 个请求(尽管默认值为 1000)。您可以在创建集群对象时使用PoolingOptions.setMaxRequestsPerConnection配置它。
但是您不能简单地将主机数量乘以每个主机的连接数量乘以运行中的请求数量并将其用作最大数量——这是最大的理论限制,但在某些情况下,某些节点应该处理比其他请求更多的请求,并且很容易超过特定节点的限制。您可以在 Java driver's documentation.
中找到有关连接池的更多信息最好select一些最大数量,并使用信号量提交不超过此限制的请求。您可以找到一个示例 here。