2013-05-04 19 views
1

从过去几周我们试图评估不同的Cassandra clients,所以现在看起来我们将继续前进Netflix/Astyanax clientAstyanax 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 colo12 nodes in PHX colo

而我们打算使用NetworkTopologyStrategyreplication factor of 4,意思是2 in each colo。我们将使用LeveledCompactionStrategy

对我上面的问题的任何解释都会有很大的帮助。会有很多人在生产环境中使用Astyanax客户端。任何反馈都会有很大的帮助。

感谢您的帮助。

更新: -

还在寻找一个答案可以解释我什么是用一个例子这三个之间的主要区别,这样我可以更好地理解。我知道这些通常意味着什么,但不能从一个例子的角度理解它将如何实现。

回答

1

ROUND_ROBIN

在这种类型的ConnectionPoolType,你的连接将在循环赛类型取决于宿主集实例化。

TOKEN_RANGE

这有点类似于ROUND_ROBIN类型,建立了一个基本的令牌意识到池将令牌范围

内循环赛的所有主机BAG

不要知道这种类型,但我想它会是这样的,你的连接将随机地从主机的BAG实例化,与令牌范围或循环模式无关。

+0

Thanks abhi。你告诉我的事情,我已经意识到了。我试图通过查看一个简单的例子来了解更多细节。我主要关注ROUND_ROBIN与TOKEN_AWARE连接池类型之间的区别以及推荐用于读取性能的内容? – ferhan 2013-05-04 16:34:45

+0

嗯...建议将TOKEN_WARE – abhi 2013-05-04 16:40:48