【发布时间】:2016-12-17 11:44:22
【问题描述】:
我有一个开箱即用配置的 3 节点 2.x Cassandra 集群。我的 java 程序使用 datastax 驱动程序 (2.19) 通过一次执行一个 CQL/DDL 语句来创建模式。我发现很多时候模式更改需要数十秒才能使多个语句的模式一致。需要很长时间的语句几乎是随机的。
我正在寻找有关如何提高模式协议速度的提示。
注意:- 当我使用 cqlsh 创建架构时,速度非常快。
2016 年 8 月 12 日更新
我添加了以下代码来执行一条语句,然后等待模式协议,以便我可以更深入地了解等待的时间。
private void executeStatement(String statement, PrintStream out) throws DBInstallerException {
int retries = 0;
final ResultSet resultSet = session.execute(statement);
if (!resultSet.getExecutionInfo().isSchemaInAgreement()) {
for (; retries < TOTAL_WAIT_FOR_SCHEMA_AGREEMENT_IN_SECONDS; retries++) {
Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
if (cluster.getMetadata().checkSchemaAgreement()) {
break;
}
}
}
if (retries >= TOTAL_WAIT_FOR_SCHEMA_AGREEMENT_IN_SECONDS) {
throw new DBInstallerException("Failed to get schema agreement after " + TOTAL_WAIT_FOR_SCHEMA_AGREEMENT_IN_SECONDS + " seconds");
} else {
if (retries > 0 ) {
out.println("INFO : Got schema agreement after " + retries + " retries");
}
}
}
很多时候,我将“Got schema agreement after”输出打印到控制台,重试次数可能多达 300 次。这对我来说没有意义。在一个基本上空闲的系统上执行任何架构更改怎么可能需要这么长时间。
【问题讨论】:
标签: cassandra datastax-java-driver cqlsh