【问题标题】:Drop table or truncate table in Cassandra, which is better在 Cassandra 中删除表或截断表,哪个更好
【发布时间】:2015-03-05 23:14:25
【问题描述】:

我们有一个用例,我们需要每天使用 Cassandra 中的当前数据重新创建一个表。为此,我们应该使用 drop table 还是 truncate table,哪个更有效?我们不想备份数据等?

谢谢 安库尔

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    我认为在几乎所有情况下,Truncate 都是比 drop recreate 更安全的操作。过去,删除/重新创建有几个问题,如幽灵数据、架构不一致等......截断应该更便宜,更稳定。

    【讨论】:

    • 非常感谢 RussS!我的一个问题是,如果我们使用 truncate,它会创建墓碑还是立即删除数据?
    • 立即生效。没有墓碑。
    【解决方案2】:

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

    【讨论】:

    • 非常感谢 Ashic!正如您所提到的,我们也面临这个问题,即使在我们尝试重新创建它时删除表之后,我们也不会让我们在大约 5 分钟左右的时间里这样做。
    • 我建议删除,因为它是一天一次的操作,我想您可能能够承受删除和创建之间的长时间延迟。如果没有,请进行截断,但请记住清除快照,除非您禁用自动快照。
    • 谢谢阿希奇。我尝试使用 truncate table 但即使在 cql 成功完成后,我也能够看到表中的记录。然后我尝试了 drop table,正如你所提到的,即使一个小时后也没有效果。我愿意使用 truncate,但它似乎不是立竿见影的。
    • 您丢弃了多少数据?截断应该是立即的。是否有记录,比如截断五分钟后?当你说drop无效时,你是什么意思?
    • 我们有近 40 亿行,但上次运行没有成功,所以我不确定文件中有多少行。在运行 drop table 之前,我已经等待了 15-20 分钟。还有drop table,我的意思是它也不是立即的。我在运行 drop table 后等待了 30 分钟,仍然无法创建表,所以我运行了 nodetool repair。
    【解决方案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 会保留架构,drop 不会。

    【讨论】:

      【解决方案4】:

      小心!

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-26
        • 2015-07-11
        相关资源
        最近更新 更多