【问题标题】:will cassandra fail on two parallel create keyspace commands executed simultanouslycassandra 会在同时执行的两个并行创建键空间命令上失败吗
【发布时间】:2019-12-09 22:25:42
【问题描述】:

我们已经体验到,如果我们推出 DDL cql 脚本,这将并行更改现有表,那么很有可能将键空间损坏到我们需要重新创建它的程度。

我们现在已经序列化了这个过程,包括该键空间的创建。现在有一个激烈的讨论,如果 cassandra 明确支持并行创建不同的键空间。

我想,这没问题,但由于集群很大,我们想有第二个意见,所以我在这里问:

我们可以安全地假设,在 cassandra 中并行创建不同的键空间是安全的吗?

【问题讨论】:

    标签: cassandra ddl cql datastax-java-driver


    【解决方案1】:

    在当前版本的 Cassandra 中这是不可能的 - 您需要在每个 DDL 语句之后等待schema agreement,包括创建其他键空间。通常驱动程序会等待一段时间(默认为 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(尚未完成)

    【讨论】:

    • 如果schemaInAgreement == false 将cqlsh create keyspace 中止?我只是手动尝试,但无法引发它。
    • 我不确定cqlsh - 也许它设置了更高的超时时间
    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 2017-09-07
    • 2019-09-07
    • 2018-07-04
    • 1970-01-01
    • 2020-06-18
    • 2017-04-07
    • 2016-12-27
    相关资源
    最近更新 更多