c++ - Datastax Cassandra C++ 驱动程序中核心连接和 i/o 线程之间的区别

标签 c++ cassandra datastax

我使用 cass_cluster_set_max_connections_per_host() 设置每个主机的核心连接数,使用 cass_cluster_set_num_threads_io() 设置 i/o 线程。 我看到我的客户主机正在建立, core connections * num i/o threads,使用 netstat 命令与集群中每个主机的 tcp 连接数。我想知道 I/O 线程和核心连接之间有什么区别?此外,如果客户端正在与 10 台主机的 Cassandra 集群通信,并且核心连接数设置为 2,则 i/o 线程设置为 4,那么从主机到集群基本上建立了 10*4*2、80 个连接 -这一切都在一个 session 中,这些连接是如何利用的?不觉得很奇怪吗?

我正在尝试调整这些值,以便如果集群同时由 100 台主机连接,则速度不会减慢。还是这些设置与速度无关?感谢任何更多信息或链接!

最佳答案

这是当前字段的官方文档 here

cass_cluster_set_num_threads_io:这是将处理查询请求的线程数。默认值:1

cass_cluster_set_max_connections_per_host:设置每个IO线程中与每个服务器建立的最大连接数。默认值:2

I am wondering what is the difference between an i/o thread and a core connection?

I/O 线程基本上负责客户端和服务器之间的所有网络操作。因此,如果您有 1000 条消息等待网络操作,该线程将一条一条地挑选请求并执行它们。默认值为 1。

一旦 I/O 线程选择了一条消息,它就会使用 set_max_connections 中指定的连接来发出请求。默认值为 2,这样 I/O 线程可以根据服务器延迟和吞吐量智能地切换连接。

I am trying to tune those values so if a cluster is connected by 100 hosts simultaneously then the speed wouldn't slow down.

您可以保持最大连接数不变并增加 i/o 线程的数量,或者以其他方式进行扩展。两者之间没有明确的更好方法。您将需要进行基准测试并查看哪种方法适用于您的案例。

我认为,如果您的请求数量较少,但请求数量很大,那么增加连接数量会更有意义,但它仍然需要进行基准测试。

This链接还提供了一些额外信息。

关于c++ - Datastax Cassandra C++ 驱动程序中核心连接和 i/o 线程之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57188915/

相关文章:

cassandra - 无法启动 Cassandra 。设置 ulimit 失败

cassandra - Cassandra 中的元组和用户定义类型有什么区别

c++ - 线程运行时间、cpu上下文切换和性能之间的关系

c++ - 如何在我的 UI 中的槽外修改 QLabel 对象?

c++ - 如何允许函数接受指定类型?

Cassandra 死了,但 pid 文件存在

cassandra - 在 Cassandra 中重新创建具有相同名称的表/键空间不好吗?

java - Java中如何从字节数组中获取数据类型

cassandra - cassandra 是否在 nodetool stopdaemon 上刷新内存表。如果不是如何避免数据丢失

c++ - 具有动态变化背景的 GUI