- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Astyanax 客户端
从 Cassandra 数据库
读取数据。我有一个带有四个节点
的单集群
。我的复制因子为 2
。我试图了解两者之间的区别
setMaxConns and setMaxConnsPerHost
Astyanax 客户端中的方法?我找不到这方面的正确文档。
我有一个多线程代码,它生成多个线程,然后仅创建一次与 Cassandra 数据库的连接(因为它是单例),然后继续重用其他请求。
现在我想了解一下上述两种方法对于读取性能将如何发挥作用?以及应该如何设置这些值?
如果我将上述两种方法设置为-
setMaxConns(-1) and setMaxConnsPerHost(20)
那么这是什么意思呢?任何解释都会有很大帮助。
更新的代码:-
下面是我用来建立连接的代码-
private CassandraAstyanaxConnection() {
context = new AstyanaxContext.Builder()
.forCluster(ModelConstants.CLUSTER)
.forKeyspace(ModelConstants.KEYSPACE)
.withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
.setDiscoveryType(NodeDiscoveryType.RING_DESCRIBE)
)
.withConnectionPoolConfiguration(new ConnectionPoolConfigurationImpl("MyConnectionPool")
.setPort(9160)
.setMaxConnsPerHost(20)
.setMaxConns(-1)
.setSeeds("host1:9160,host2:9160,host3:9160,host4:9160")
)
.withAstyanaxConfiguration(new AstyanaxConfigurationImpl()
.setCqlVersion("3.0.0")
.setTargetCassandraVersion("1.2"))
.withConnectionPoolMonitor(new CountingConnectionPoolMonitor())
.buildKeyspace(ThriftFamilyFactory.getInstance());
context.start();
keyspace = context.getEntity();
emp_cf = ColumnFamily.newColumnFamily(
ModelConstants.COLUMN_FAMILY,
StringSerializer.get(),
StringSerializer.get());
}
如果我正在调试此代码,它甚至不会命中 BagOfConnectionsConnectionPoolImpl
类。我在同一个类中放置了很多断点,以查看它如何使用连接和其他默认参数。但不知道为什么它没有达到该级别。
最佳答案
有关这些配置属性的行为可能取决于实现。
BagOfConnectionsConnectionPoolImpl
是目前唯一支持这两个属性的实现。其行为如下:
每次 cassandra 操作(查询或突变)时都会从池中借用连接,并在操作完成后返回到池中。
maxConnsPerHost
- 每个 cassandra 主机的最大连接数。
maxConns
- 池中的最大连接数。
这两个数字都必须为正数,因此 setMaxConns(-1)
不起作用。
在尝试从池中借用连接时,池会根据 maxConns
检查 Activity 连接数。如果超出限制,它将等待直到释放某些连接。如果在指定的超时时间内没有可用的连接,池将抛出 PoolTimeoutException
。
如果未超过 maxConns
限制,池会尝试查找它知道的(指定为种子或在发现过程中找到的) Activity 连接数低于 maxConnsPerHost< 的 cassandra 主机
并连接到它。如果所有主机达到连接限制,池将抛出 NoAvailableHostsException
。
例如,让我们以连接到 4 个节点的集群的客户端为例:
setMaxConns(100); setMaxConnsPerHost(10)
:有效最大连接数为40(每个节点10个连接,不会再进行连接尝试)。将抛出 NoAvailableHostsException
。
setMaxConns(20); setMaxConnsPerHost(10)
:有效最大连接数为20。不同主机的连接会均匀分布,但不一定均等。将抛出PoolTimeoutException
。
如果节点加入或离开集群,事情会变得更加复杂,但总体思路是相同的。
TokenAwareConnectionPoolImpl 和 RoundRobinConnectionPoolImpl 都忽略 maxConns 配置属性。他们只是选择一个主机(取决于行 token 或随机)并尝试连接到它。
如果该主机的 Activity 连接数超过 maxConnsPerHost
,池将等待直到释放某些连接。如果在指定的超时时间内没有可用的连接,则作为故障转移的一部分,将执行(可能)另一台主机的另一次连接尝试。
关于java - Astyanax 客户端中的 setMaxConns 和 setMaxConnsPerHost,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16206515/
我正在使用 Astyanax 客户端 从 Cassandra 数据库 读取数据。我有一个带有四个节点的单集群。我的复制因子为 2。我试图了解两者之间的区别 setMaxConns and setMax
我是一名优秀的程序员,十分优秀!