【问题标题】:How to do a sync drop and create keyspace in cassandra?如何在 cassandra 中进行同步删除和创建密钥空间?
【发布时间】:2015-11-02 19:50:21
【问题描述】:

我不希望键空间中任何表中的任何数据。所以我决定删除键空间(如果存在)并立即创建它。我正在使用下面的代码来实现相同的目的。

 CassandraConnector(conf).withSessionDo { session =>
  session.execute(s"DROP KEYSPACE if EXISTS $keyspace")
  session.execute("""CREATE KEYSPACE if NOT EXISTS %s
  WITH replication = {'class':'SimpleStrategy','replication_factor':'1'};""".format(keyspace)

) }

但它无法创建密钥空间。从日志中我只能看到一条警告,说明

Received a DROPPED notification for table test.table_tracker, but this keyspace is unknown in our metadata.

我也尝试过使用 python cassandra 驱动程序。但结果是一样的。 我相信存在一些竞争条件,并且丢弃键空间发生异步(如果我错了,请纠正我)。

如何同步删除和创建键空间?

【问题讨论】:

    标签: cassandra spark-cassandra-connector


    【解决方案1】:

    如果您只是想从表中删除所有数据,您应该考虑使用TRUNCATE,它会从表中删除所有数据同时保留其架构,即:

    TRUNCATE test.table_tracker;
    

    应谨慎执行架构更改,因此应尽可能避免。此外,在所有版本的 cassandra 中,围绕快速删除和重新创建密钥空间存在许多不同的问题,因此截断路由更加可靠。

    您可能遇到的一个问题是,您可能在执行每个操作后没有等待模式协议,这可能会出现问题,尤其是在后续操作中操作相同的键空间/表的情况下。 java-driver(以及 spark 连接器)只会在模式更改之间等待最多可配置的时间。有关如何等待协议的指导,请参阅java-driver metadata doc 中的此指导,即:

    if (cluster.getMetadata().checkSchemaAgreement()) {
        // schema is in agreement
    } else {
        // schema is not in agreement
    }
    

    【讨论】:

    • 还要注意 truncate 会自动创建一个快照。所以请留意磁盘空间并手动运行“nodetool clearsnapshot”来删除它们。
    猜你喜欢
    • 2018-05-14
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 2016-12-22
    • 2017-07-24
    • 2013-09-22
    • 1970-01-01
    • 2019-02-23
    相关资源
    最近更新 更多