我正在使用DCAwareRoundRobinPolicy进行cassandra连接。但是我的驱动程序查询所花费的时间比我在php中使用相同的连接参数时要大。
php中的datastax驱动程序使用相同的函数:
withDatacenterAwareRoundRobinLoadBalancingPolicy(
string $localDatacenter, int $hostPerRemoteDatacenter,
bool $useRemoteDatacenterForLocalConsistencies )
当最后一个参数设置为false时,仅使用本地主机进行查询。 但是此参数设置在gocql驱动程序中不可用。我猜这可能导致我面临的问题。如果我错了,请纠正我。
请在这方面提供帮助。
当我在群集中只有一个节点时,我没有遇到这个问题。
对于nodetool状态:
数据中心:DC1
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 206.* 298.89 GB 1 ? de58dea3-7d16-4318-8549-a34d42aa3d65 RAC1
UN 206.* 287.63 GB 1 ? b312ce3d-c23f-476e-9396-3f8ec2219425 RAC1
UN 206.* 280.08 GB 1 ? c82f1f90-bca6-4438-bc43-68bf370a555a RAC1
UN 206.* 260.61 GB 1 ? 95b33f1f-d282-42ea-974b-987552932535 RAC1
UN 206.* 301.05 GB 1 ? 4725e34f-9368-4c18-85ef-6cd96352b73e RAC1
数据中心:DC3
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 173.* 262.16 GB 256 ? 283afa18-d085-4ff0-b410-e0f5fd368669 RAC1
UN 173.* 292.17 GB 256 ? b59a0d6c-2f77-4912-a0ad-eae3687aabbc RAC1
UN 173.* 253.07 GB 256 ? 44b6e01a-f6f1-471c-95a2-ff66f6188438 RAC1
UN 173.* 281.6 GB 256 ? 43d1a656-5aeb-42a9-bfee-c11f1a0a76dc RAC1
UN 173.* 250.6 GB 256 ? ceb40080-012c-4446-8a6b-220ffa472ddc RAC1
答案 0 :(得分:0)
我遇到了类似的问题,但是通过迫使本地DC的节点与LOCAL DC节点联系;我能够为我解决此问题。
您可以通过将localDC设置为localDC的名称并同时从本地DC添加联系人来强制节点首先与本地DC节点联系。
DCAwareRoundRobinPolicy.builder().withLocalDc(getLocalDC());
StringTokenizer tokenizer = new StringTokenizer(getCassandraHostsOfLocalDC().trim(),",");
while(tokenizer.hasMoreElements()){
contactPoints.add(tokenizer.nextToken().trim());
}
builder.addContactPoints(contactPoints.toArray(new String[0]));