gpt4 book ai didi

java - MaxConnectionsPerHost 与 MaxRequestsPerConnection Cassandra 驱动程序

转载 作者:行者123 更新时间:2023-12-02 11:04:09 25 4
gpt4 key购买 nike

我正在处理 C* 的巨大查询集。我已经使用

限制异步查询执行器
Semaphore maxInFlight = new Semaphore(MAX_REQUEST_PER_CON_REMOTE);
...
maxInFlight.acquireUninterruptibly();
ResultSetFuture future = executeAsync(...);
Futures.addCallback(future, new FutureCallback<ResultSet>() {
@Override
public void onSuccess(ResultSet rs) {
...
maxInFlight.release();
}

@Override
public void onFailure(Throwable t) {
...
maxInFlight.release();
}, executor);

其中MAX_REQUEST_PER_CON_REMOTE是MaxRequestsPerConnection参数。MaxConnectionsPerHos 默认等于 1,我没有更改它。

随着节点数量的增加或复制因子的增加,我相信我可以增加 MaxConnectionsPerHos 或 MaxRequestsPerConnection 来提高生产力。增加其中一项或多项是否有任何优势?

然后我想更改信号量许可的依赖关系,但实际上不知道如何操作。这个想法是添加监听器并在添加或删除主机时更新 maxInFlight。

最佳答案

如果您不使用白名单或黑名单策略,则驱动程序将单独连接到每个主机(当然取决于配置,如果您使用 DC Aware 策略)。因此,当您添加新节点时,驱动程序将添加到该节点的新连接,并且负载将被重新分配(如果您的查询没有“热”分区)。如果您增加复制因子,那么它也没有多大关系,因为向副本发送请求将不是由驱动程序完成,而是由“协调器”节点完成...

因此,当您在本地 DC 中有 N 个节点时,理论上您最多可以发送 N * MaxInFlighConnections 个请求(但这取决于请求中数据的分布)。

此外,我发现您正在使用 MAX_REQUEST_PER_CON_REMOTE - 最好仅将请求发送到本地 DC 的节点。此外,您还可以为每个连接配置最多 32k 个请求,在大多数情况下,这对于一个执行请求的客户端来说已经足够了。

您可以在Driver's documentation中找到更多信息.

附注我有一个separate class它使用与 Semaphore 相同的方法,但会自动添加监听器 - 请随意获取它。

关于java - MaxConnectionsPerHost 与 MaxRequestsPerConnection Cassandra 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51105966/

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