我们的经验是,如果我们推出 DDL cql 脚本,这将并行更改现有表,那么很有可能会损坏键空间,以至于我们需要重新创建它。
我们现在已经序列化了这个过程,包括创建该键空间。现在,关于 cassandra 是否明确支持并行创建不同的键空间存在激烈的讨论。
我想,这没问题,但由于集群很大,我们想有第二个意见,所以我在这里问:
我们可以安全地假设,在 cassandra 中并行创建不同的 key 空间是安全的吗?
最佳答案
在当前版本的 Cassandra 中这是不可能的 - 您需要等待 schema agreement在每个 DDL 语句之后,包括创建其他键空间。通常驱动程序会等待一段时间(默认 10 秒)以确认集群中的所有节点都具有相同的架构版本。根据驱动程序,您可以显式检查架构一致性 - 在执行语句后返回的结果集中,或通过集群元数据。例如,在 Java 中,它可能看起来为 following :
Metadata metadata = cluster.getMetadata();
for (int i = 0; i < commands.length; i++) {
System.out.println("Executing '" + commands[i] + "'");
ResultSet rs = session.execute(commands[i]);
if (!rs.getExecutionInfo().isSchemaInAgreement()) {
while (!metadata.checkSchemaAgreement()) {
System.out.println("Schema isn't in agreement, sleep 1 second...");
Thread.sleep(1000);
}
}
}
新版本的 Cassandra 将在这方面进行改进,例如通过 CASSANDRA-13426 (致力于4.0),和CASSANDRA-10699 (尚未完成)
关于cassandra - cassandra 在同时执行两个并行创建键空间命令时会失败吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57307046/