cassandra - cassandra 在同时执行两个并行创建键空间命令时会失败吗

标签 cassandra ddl cql datastax-java-driver

我们的经验是,如果我们推出 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/

相关文章:

java - 关闭 ResultSet 和 Statement 资源(datastax,无 close() 方法)

Cassandra nodetool cfstats - 读取计数始终为 0

sql - 增加 SQL Server 中的 NVARCHAR 列大小会导致索引重建吗?

oracle - 如何从 Oracle 10 模式导出 ddl 脚本以在 H2 数据库中创建表和约束?

java - Cassandra 中未排序的 map 类型

nosql - 在 cassandra 中拥有多个集群键有什么好处?

grails - Grails 2.x 模式导出或类似命令能否为给定数据源的模式更新生成 DDL?

go - 多个 in 子句 gocql 未执行

cassandra - 集群键的范围查询

cassandra - 如何从 Cassandra 的种子列表中删除节点而不丢失数据?