【问题标题】:Number of connections per host in Datastax C++ driverDatastax C++ 驱动程序中每台主机的连接数
【发布时间】:2018-10-18 10:16:07
【问题描述】:

我无法理解“连接”在主机上执行查询中的作用。

cass_cluster_set_core_connections_per_host 设置每个 IO 线程中每个服务器的连接数。为什么这个参数是可配置的?每个 IO 线程有 1 个以上的连接有什么好处?什么决定了这个参数的最佳值?

【问题讨论】:

    标签: cassandra datastax cassandra-3.0


    【解决方案1】:

    此函数设置每个主机的初始连接数,它可以增加到由cass_cluster_set_max_connections_per_host 函数设置的值(默认为2)。当 in-flight 请求数大于cass_cluster_set_max_concurrent_requests_threshold 设置的(默认为 100)时,将创建新连接。如果您知道您会从一开始就生成大量正在进行的请求,您可以使用cass_cluster_set_core_connections_per_host 设置更高的值 - 在这种情况下,您在执行请求时不会花时间打开额外的连接。

    【讨论】:

    • 我仍然无法可视化连接。究竟什么是连接?我了解线程是什么,但是为什么线程需要多个连接来执行给定数量的请求?怎么一个还不够?
    • 在 Cassandra 端,处理所有这些请求也需要资源,有时在 Cassandra 端的线程之间分配负载可能是有意义的。我相信 Java 驱动程序的文档更好地解释了这一点:docs.datastax.com/en/developer/java-driver/3.5/manual/pooling
    • 目前我的高级视图是这样的;如果我们有“x”个 IO 线程,那么这些线程可以在集群节点上异步执行查询。如果我们考虑这些 x 线程中的单个线程,则该单个线程将能够通过连接将查询同步传递到集群节点。我想这个观点有问题,因为如果它是正确的,我不知道每个 IO 线程有多个连接如何改进?
    • 驱动程序使用多个连接的原因是每个连接可用的流(流 id)数量(v2 允许 128,而 v3+ 允许 32,768)。
    • 如果您使用多个线程,那么使用 1 个连接是可以的 - 您正在通过线程调整吞吐量。但同样可以通过使用更少的线程和每个线程的更多连接来实现 - 这取决于应用程序的架构、回调中的数据处理类型等。
    猜你喜欢
    • 2017-02-05
    • 2017-07-05
    • 2018-11-15
    • 2013-12-23
    • 1970-01-01
    • 2019-12-27
    • 2023-03-21
    • 2014-03-27
    • 1970-01-01
    相关资源
    最近更新 更多