【问题标题】:Is Cassandra table creation slow?Cassandra 表创建速度慢吗?
【发布时间】:2022-10-19 02:09:52
【问题描述】:

我有一个 Jar 文件,它初始化我的 Cassandra 数据库,在此期间它创建了大约 13 个表。这个文件正在由我们的测试运行,我们在其中启动一个 Cassandra 测试容器并使用 jar 来设置它。

但令我惊讶的是,每张表都需要约 1-2 秒来初始化,总共约 15 秒。如果我使用cqlsh 手动创建这些表之一,则需要大约 100-120 毫秒。

这种延迟有解释吗?有解决办法吗?

我遇到了Why does it take so long to create a table?,但我的表格中没有任何标签。

更新

Java 代码归结为

cqlSession.execute( SimpleStatement.newInstance(query).setIdempotent(isIdempotent) );

它使用java-driver-core 版本4.14.1query 看起来像

CREATE TABLE settings (key text, value text, PRIMARY KEY (key))

并花了 1.125 秒。

【问题讨论】:

    标签: java docker cassandra datatables cqlsh


    【解决方案1】:

    因为 Cassandra 是一个分布式系统,所以当您创建表时,您需要确保将更改传播到所有节点,以便模式一致。当您使用默认情况下使用循环策略的 Java 驱动程序时,这一点尤其重要,因此不同的 DDL 语句可能会发送到不同的节点,从而导致模式不匹配错误。您可以找到如何正确执行此操作的示例here

    cqlsh 中,这不是问题,因为它总是使用相同的连接来发送所有命令,因此您不会遇到架构不匹配的情况,因为架构版本是在同一个节点上生成的。

    【讨论】:

    • 有解决办法吗?在我的测试容器 docker setup AFAIK 中,只有一个节点。这不会绕过上面的问题吗?
    • 没有实际代码真的很难说
    • 这可能是太少的上下文。但是Java代码归结为cqlSession.execute( SimpleStatement.newInstance(query).setIdempotent(isIdempotent) );并使用java-driver-core版本4.14.1。其中query 是创建表的CQL 语句。例如CREATE TABLE settings (key text, value text, PRIMARY KEY (key)) 运行时间为 1.125 秒。
    • 我记得,驱动程序 4.x 显式等待模式协议......
    • 感谢您的指导。我需要进一步调查。看起来有一些可用的选项 - docs.datastax.com/en/developer/java-driver/4.2/manual/core/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2014-06-23
    • 2018-10-17
    • 1970-01-01
    • 2016-05-19
    • 2015-10-28
    • 1970-01-01
    相关资源
    最近更新 更多