如何在cassandra中执行同步丢弃并创建键空间?

时间:2015-08-10 19:14:03

标签: cassandra spark-cassandra-connector

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

 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驱动程序。但结果是一样的。 我相信有一些竞争条件,并且丢弃键空间发生异步(如果我错了,请纠正我)。

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

1 个答案:

答案 0 :(得分:6)

如果您只想删除表中的所有数据,则应考虑使用TRUNCATE从表中删除所有数据,同时保留其模式,即:

TRUNCATE test.table_tracker;

应该谨慎地执行架构更改,因此您应尽可能避免使用它。此外,所有版本的cassandra都会在快速删除和重新创建键空间时出现许多不同的问题,因此截断路径更加可靠。

您可能遇到的一个问题是,在执行每个可能有问题的操作之后,您可能没有等待架构协议,尤其是在后续操作中操作相同的键空间/表时。 java驱动程序(以及spark连接器)只会在架构更改之间等待一段可配置的时间。请参阅java-driver metadata doc中的此指南,以获取有关如何等待协议的指导,即:

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