我正在使用 Astyanax 客户端从 Cassandra 数据库中读取数据。
我在 Cassandra 数据库中有大约一百万个唯一行。我有一个带有四个节点的交叉托管中心集群。
这些是我的四个节点:
node1:9160
node2:9160
node3:9160
node4:9160
我启用了 KeyCaching 并且也启用了 SizeTieredCompaction 策略。
我有一个多线程的客户端程序,它将使用 Astyanax 客户端从 Cassandra 数据库中读取数据,并且我使用 20 个线程运行该程序。如果我用 20 个线程运行我的客户端程序,那么从 Cassandra 数据库读取数据的性能会降低。
因此,我首先想到的是可能存在与 Cassandra 的连接的争用(他们是否使用池,如果有的话,维护了多少连接)?我正在使用以下代码使用 Astyanax 客户端进行连接。
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(1)
.setSeeds("nod1:9160,node2:9160,node3:9160,node4: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());
}
我是否需要对上述代码进行任何更改以提高性能?
这个方法有什么作用?
setMaxConnsPerHost(1)
我需要增加它以提高性能吗?我有四个节点,所以我应该将其更改为 4?
setMaxConns(20) 方法会调用吗?我是否还需要添加它以提高性能?因为我将使用多个线程运行我的程序。