【发布时间】:2013-04-28 11:42:02
【问题描述】:
过去几周我们一直在尝试评估不同的 Cassandra clients,所以现在看来我们将继续使用 Netflix/Astyanax client。
我们正在尝试优化Cassandra database,主要针对read performance。目前,我正在像这样创建Astyanax connection-
/**
* Creating Cassandra connection using Astyanax client
*
*/
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(40)
.setSeeds("node1: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());
}
问题陈述:-
所以默认情况下,我相信Astyanax client 会使用ConnectionPoolType as ROUND_ROBIN。
现在我试图从read performance 的角度了解以下选项中哪个更好?
TOKEN_AWARE or ROUND_ROBIN or BAG
这三者之间有什么区别?以及我们如何决定我们应该使用上述三个中的一个?
关于我们集群的一些背景知识。我们将有单个cross colo cluster 和24 nodes。含义12 nodes in SLC colo和12 nodes in PHX colo。
我们将使用NetworkTopologyStrategy 和replication factor of 4,意思是2 in each colo。我们将使用LeveledCompactionStrategy。
对我上述问题的任何解释都会有很大帮助。会有很多人在生产环境中使用 Astyanax 客户端。任何反馈都会有很大帮助。
感谢您的帮助。
更新:-
仍在寻找可以通过示例向我解释这三者之间的主要区别的答案,以便我更好地理解。我知道这些一般是什么意思,但无法从示例的角度理解它是如何工作的。
【问题讨论】:
标签: java cassandra astyanax netflix