【问题标题】:Cassandra Delete when row not exists当行不存在时,Cassandra 删除
【发布时间】:2023-04-03 08:10:01
【问题描述】:

当行不存在时,在 cassandra 上运行 delete 语句是否会影响性能?我没有在我的删除语句中传递 IF EXISTS 子句,因为它增加了检查的开销。我没有在网上找到任何关于这个独特用例的信息。

【问题讨论】:

    标签: cassandra delete-row


    【解决方案1】:

    Cassandra 中的删除操作只是添加一个名为“墓碑”的标记 - 它将附加到带有数据的文件中以“隐藏”先前存在的数据。它可能会对读取操作产生一些性能影响,如果您在分区内有很多删除等,因为墓碑通常在数据文件中保留 10 天(可按表配置)

    有一个very interesting blog post on deletes and tombstones - 我推荐阅读它。

    【讨论】:

    • 我知道墓碑,我的问题专门针对不存在的键(如行中不存在)。对不存在的数据运行删除是否会对性能产生影响。例如,如果我生成大约 10 个删除语句,其中只有一个语句具有主键,那么其他 9 个语句实际上是否会对性能产生影响?
    • 好吧,根据您的一致性级别和节点数,即使 Cassandra 在创建新的墓碑之前检查是否已经存在墓碑,您仍可能为所有查询编写墓碑。但是,我打赌它不会检查,因为它不会检查其他写入操作,所以我认为 10 个查询中的每一个都会产生相同的性能影响。
    • Cassandra 默认不检查以前的数据是否存在。正如我所写,如果您执行太多此类删除操作,然后运行 ​​Spark 作业,则性能可能会影响读取操作
    • 好吧,我觉得奇怪的是,墓碑仍然会写在不存在的数据上。您是否暗示一个不存在的唯一主键,我按下删除 Cassandra 会创建一行,然后用墓碑标记它。使用分布式数据库似乎是合乎逻辑的事情。
    • 这是对性能的权衡 - Cassandra 的写入速度非常快,因为它不会读取任何数据(轻量级事务除外) - 数据只是添加到内存表中......顺便说一句,也会为集合和 UDT 之类的东西生成墓碑 - 因为可能存在以前的数据,而新数据是部分的,Cassandra 需要确保没有以前的数据存在
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多