【发布时间】:2015-03-05 23:14:25
【问题描述】:
我们有一个用例,我们需要每天使用 Cassandra 中的当前数据重新创建一个表。为此,我们应该使用 drop table 还是 truncate table,哪个更有效?我们不想备份数据等?
谢谢 安库尔
【问题讨论】:
标签: cassandra
我们有一个用例,我们需要每天使用 Cassandra 中的当前数据重新创建一个表。为此,我们应该使用 drop table 还是 truncate table,哪个更有效?我们不想备份数据等?
谢谢 安库尔
【问题讨论】:
标签: cassandra
我认为在几乎所有情况下,Truncate 都是比 drop recreate 更安全的操作。过去,删除/重新创建有几个问题,如幽灵数据、架构不一致等......截断应该更便宜,更稳定。
【讨论】:
Drop table 删除表和所有数据。截断清除表中的所有数据,并默认创建数据的快照(但不创建模式)。效率方面,它们很接近 - 尽管 truncate 会创建快照。您可以通过在 cassandra yaml 配置中将 auto_snapshot 设置为 false 来禁用此功能,但它是服务器范围的。如果不是太麻烦,我会删除并重新创建表 - 但如果您在删除后不等待一段时间再重新创建,我会看到问题。
【讨论】:
注意:默认情况下,删除或截断表时会创建快照。这需要手动清除以回收磁盘空间。
手动测试。
Truncate 会保留架构,drop 不会。
【讨论】:
小心!
来自 datastax 文档:https://docs.datastax.com/en/archived/cql/3.3/cql/cql_reference/cqlTruncate.html
注意:TRUNCATE 向所有节点发送 JMX 命令,告诉它们删除保存指定表中数据的 SSTable。如果这些节点中的任何一个已关闭或没有响应,则该命令将失败并输出如下消息: 截断cycling.user_activity; 无法完成请求:一个或多个节点不可用。
不幸的是,文档中没有说明 DROP 的行为是否不同
【讨论】: