從過去幾周我們試圖評估不同的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