10

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

我能够使用 Datastax Java 驱动程序成功创建 Cassandra 连接......但我想知道,在与 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 驱动程序时也应该有一些最佳设置或推荐?

4

2 回答 2

4

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

然后你需要使用DCAwareRoundRobinPolicy

就像我之前在 Astyanax 中使用的示例一样,您需要使用 TOKEN_AWARE ...

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

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

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

于 2013-11-05T11:08:20.347 回答
0

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

cassandra.loadbalancing.whitelistpolicy.hostnames   
于 2017-01-20T18:27:26.863 回答