在Cassandra中删除表或截断表,这是更好的

时间:2015-01-07 22:40:51

标签: cassandra

我们有一个用例,我们需要每天使用Cassandra中的当前数据重新创建一个表。为此我们应该使用drop table或truncate table,这会有效吗?我们不希望备份数据等?

由于 ANKUR

4 个答案:

答案 0 :(得分:7)

Drop table删除表和所有数据。 Truncate清除表中的所有数据,默认情况下会创建数据的快照(但不会创建模式)。效率方面,它们很接近 - 尽管truncate会创建快照。您可以通过在cassandra yaml config中将auto_snapshot设置为false来禁用此功能,但它是服务器范围的。如果不是太麻烦的话,我会放弃并重新创建表格 - 但是如果你在重新创建之前没有等待一段时间我就会看到问题。

答案 1 :(得分:6)

我认为几乎所有情况下,Truncate都比drop重建更安全。过去使用ghost数据,架构分歧等等来删除/重新创建了一些问题...尽管已经有一些修复尝试使drop / recreate更稳定,但如果它是每天执行的操作截断应该更便宜,更稳定。

答案 2 :(得分:3)

来源:https://support.datastax.com/hc/en-us/articles/204226339-FAQ-How-to-drop-and-recreate-a-table-in-Cassandra-versions-older-than-2-1

注意:默认情况下,在删除或截断表时会创建快照。这需要手动清理以回收磁盘空间。

也可以手动测试。

Truncate会保留架构,但不会丢弃。

答案 3 :(得分:1)

当心!

摘自datastax文档:https://docs.datastax.com/en/archived/cql/3.3/cql/cql_reference/cqlTruncate.html

  

注意:TRUNCATE向所有节点发送JMX命令,告诉它们从指定表中删除保存数据的SSTable。如果这些节点中的任何一个发生故障或没有响应,该命令将失败并输出如下消息:   截断cycling.user_activity;   无法完成请求:一个或多个节点不可用。

不幸的是,文档中没有任何内容说明DROP的行为是否不同