从过去几周我们试图评估不同的Cassandra clients
,所以现在看起来我们将继续前进Netflix/Astyanax client
。Astyanax Cassandra客户端的连接池类型
我们正在努力优化Cassandra database
主要是为read performance
。目前,我喜欢这个 -
/**
* 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 connection
: -
所以在默认情况下,我相信Astyanax client
将使用ConnectionPoolType as ROUND_ROBIN
。
现在我想从read performance
的角度来理解哪一个会更好的从下面的选项中看出来?
TOKEN_AWARE or ROUND_ROBIN or BAG
而正是这三个之间的区别?我们如何决定我们应该使用三个以上的其中一个?
关于我们集群的一些背景知识。我们将有24 nodes
单一cross colo cluster
。含义12 nodes in SLC colo
和12 nodes in PHX colo
。
而我们打算使用NetworkTopologyStrategy
和replication factor of 4
,意思是2 in each colo
。我们将使用LeveledCompactionStrategy
。
对我上面的问题的任何解释都会有很大的帮助。会有很多人在生产环境中使用Astyanax客户端。任何反馈都会有很大的帮助。
感谢您的帮助。
更新: -
还在寻找一个答案可以解释我什么是用一个例子这三个之间的主要区别,这样我可以更好地理解。我知道这些通常意味着什么,但不能从一个例子的角度理解它将如何实现。
Thanks abhi。你告诉我的事情,我已经意识到了。我试图通过查看一个简单的例子来了解更多细节。我主要关注ROUND_ROBIN与TOKEN_AWARE连接池类型之间的区别以及推荐用于读取性能的内容? – ferhan 2013-05-04 16:34:45
嗯...建议将TOKEN_WARE – abhi 2013-05-04 16:40:48