astyanax cassandra客户机中的java连接池类型

wbrvyc0a  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(388)

在过去的几周里,我们试图评估不同的 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());
}

问题statement:-
所以我认为,默认情况下 Astyanax client 将使用 ConnectionPoolType as ROUND_ROBIN .
现在我试着从 read performance 从以下选项看哪一个更好? TOKEN_AWARE or ROUND_ROBIN or BAG 那这三者有什么区别呢?我们如何决定应该使用以上三种方法中的一种?
关于我们集群的一些背景。我们要单身 cross colo cluster24 nodes . 意义 12 nodes in SLC colo 以及 12 nodes in PHX colo .
我们将使用 NetworkTopologyStrategyreplication factor of 4 ,含义 2 in each colo . 我们将使用 LeveledCompactionStrategy .
对我上述问题的任何解释都会大有帮助。将会有很多人在生产环境中使用astyanax客户机。任何反馈都会大有帮助。
谢谢你的帮助。
update:-
仍然在寻找一个答案,可以解释我之间的主要区别,这三个例子,使我可以更好地理解。我知道这些通常意味着什么,但无法从一个例子的Angular 理解它将如何运作。

9jyewag0

9jyewag01#

循环赛
在这种类型的connectionpooltype中,您的连接将根据主机集以循环类型示例化。
令牌\u范围
它有点类似于循环类型,设置了一个基本的令牌感知池,它将循环令牌范围内的所有主机

我对这种类型不太了解,但我猜它会是这样的,您的连接将从主机包中随机示例化,与令牌范围或循环模式无关。

相关问题