Cassandra Java驱动程序的最佳设置,仅写入本地数据中心

时间:2013-10-26 08:32:46

标签: java cassandra datastax-java-driver

我最近开始在我们的Cassandra用例中使用Datastax Java驱动程序......我们将使用Datastax Java驱动程序读取/写入Cassandra ...

我成功地能够使用Datastax Java驱动程序创建Cassandra连接......但是我想知道,我是否应该在生产环境中使用任何其他设置,以便在建立连接时使用Datastax Java驱动程序获得更好的性能卡桑德拉?

/**
 * Creating Cassandra connection using Datastax driver
 *
 */
private DatastaxConnection() {

    try{
        builder = Cluster.builder();
        builder.addContactPoint("some-node");

        // Can anybody explain me what does below piece of code do?

        builder.poolingOptions().setCoreConnectionsPerHost(
                HostDistance.LOCAL,
                builder.poolingOptions().getMaxConnectionsPerHost(HostDistance.LOCAL));

        // And also what does below piece of code is doing?       
        cluster = builder
                .withRetryPolicy(DowngradingConsistencyRetryPolicy.INSTANCE)
                .withReconnectionPolicy(new ConstantReconnectionPolicy(100L))
                .build();

        StringBuilder s = new StringBuilder();
        Set<Host> allHosts = cluster.getMetadata().getAllHosts();
        for (Host h : allHosts) {
            s.append("[");
            s.append(h.getDatacenter());
            s.append("-");
            s.append(h.getRack());
            s.append("-");
            s.append(h.getAddress());
            s.append("]");
        }
        System.out.println("Cassandra Cluster: " + s.toString());

        session = cluster.connect("testdatastaxks");
    } catch (NoHostAvailableException e) {

    } catch (Exception e) {

    }
}

我的首要任务是: -

  • 在本地数据中心过滤出Cassandra节点。因此,在连接池中,它只有本地数据中心Cassandra节点。
  • 使用具有某些特定设置的Datastax java驱动程序时,可获得最佳性能。

我知道某些设置可能会在不同的环境中有所不同,但是在使用Datastax Java驱动程序进行Cassandra连接时,可能会有一些必须遵循的设置才能获得最佳性能。

就像我之前使用的Astyanax中的一个例子一样,你需要使用TOKEN_AWARE ...

因此在使用Datastax java驱动程序时,应该有一些最好的设置或建议吗?

2 个答案:

答案 0 :(得分:4)

  

在本地数据中心过滤掉Cassandra节点。所以在连接池中它只有本地数据中心Cassandra节点

然后您需要使用DCAwareRoundRobinPolicy

  

就像我之前使用的Astyanax中的一个例子一样,你需要使用TOKEN_AWARE ...

对于DataStax Java驱动程序也是如此,它被称为TokenAwarePolicy,可以在上面引用的DCAwareRoundRobinPolicy之上使用。

  

我知道某些设置可能会在不同的环境中有所不同,但是在使用Datastax Java驱动程序进行Cassandra连接时,可能会有一些必须遵循的设置才能获得最佳性能。

我不能代表“每个人”,但在正确选择如上所述的负载平衡策略之外,其余的很可能取决于环境。但是当然如果你非常关心性能,那么最好使用Configuration中的各种设置和一些实际工作负载,看看是否有帮助。

答案 1 :(得分:0)

属性可用于限制希望驱动程序使用的主机名。

cassandra.loadbalancing.whitelistpolicy.hostnames