我最近开始在我们的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) {
}
}
我的首要任务是: -
我知道某些设置可能会在不同的环境中有所不同,但是在使用Datastax Java驱动程序进行Cassandra连接时,可能会有一些必须遵循的设置才能获得最佳性能。
就像我之前使用的Astyanax中的一个例子一样,你需要使用TOKEN_AWARE ...
因此在使用Datastax java驱动程序时,应该有一些最好的设置或建议吗?
答案 0 :(得分:4)
在本地数据中心过滤掉Cassandra节点。所以在连接池中它只有本地数据中心Cassandra节点
然后您需要使用DCAwareRoundRobinPolicy。
就像我之前使用的Astyanax中的一个例子一样,你需要使用TOKEN_AWARE ...
对于DataStax Java驱动程序也是如此,它被称为TokenAwarePolicy,可以在上面引用的DCAwareRoundRobinPolicy之上使用。
我知道某些设置可能会在不同的环境中有所不同,但是在使用Datastax Java驱动程序进行Cassandra连接时,可能会有一些必须遵循的设置才能获得最佳性能。
我不能代表“每个人”,但在正确选择如上所述的负载平衡策略之外,其余的很可能取决于环境。但是当然如果你非常关心性能,那么最好使用Configuration中的各种设置和一些实际工作负载,看看是否有帮助。
答案 1 :(得分:0)
属性可用于限制希望驱动程序使用的主机名。
cassandra.loadbalancing.whitelistpolicy.hostnames