在同时执行两个并行create keyspace命令时,cassandra会失败吗

bwitn5fc  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(394)

我们已经经历过,如果我们推出ddl cql脚本,它将并行地改变一个现有的表,那么就有很大的机会损坏键空间,以至于我们需要重新创建它。
我们现在已经序列化了这个过程,包括创建键空间。现在有一个激烈的讨论,如果cassandra明确支持并行创建不同的键空间。
我想,这是可以的,但由于集群很大,我们想有第二个意见,所以我在这里问:
我们可以安全地假设,在cassandra中并行创建不同的键空间是安全的吗?

busg9geu

busg9geu1#

在当前版本的cassandra中,这是不可能的—您需要在每个ddl语句之后等待模式协议,包括创建其他键空间。通常,驱动程序会等待一段时间(默认为10秒)来确认集群中的所有节点都具有相同的架构版本。根据驱动程序的不同,您可以在执行语句后返回的结果集中或通过集群元数据显式检查架构协议。例如,在java中,它可以如下所示:

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(尚未完成)

相关问题