首页 > 解决方案 > 卡桑德拉批次

问题描述

我刚开始使用 Cassandra,我有一个常见问题“假设我需要插入近 2000+ 条记录,大多数人确实说这里不要使用批处理,但另一方面也听说“与存储过程最接近的功能将是批处理,因为它允许您“捆绑”与插入、更新或删除相关的不同 DML 语句。”

因此,任何人都可以建议我可以创建一次、存储并在需要时多次调用的最佳方式,这可以支持像 SQL 中的 SP 那样更快地执行

标签: sqlstored-procedurescassandrainsert

解决方案


Cassandra 中的批次有非常具体的用途:

  • 一次应用多个更改,通常应用于多个表,以提供数据更新的一致性,保证它们都将被应用,或者全部失败。这通常称为“记录批处理”——在这种情况下,Cassandra 在应用更改之前在多个服务器上执行批处理副本,并在成功应用批处理操作后删除。结果,这样的批次比通常的操作慢得多。
  • 在单个分区内应用多个操作 - 通常称为“未记录的批处理” - 在这种情况下,所有操作都被视为一个突变,因此与多个单独的操作相比,这非常快。

因此,批处理只能用于单个分区内的多个插入/更新/删除(否则与单个语句相比,您将获得更差的性能),或者当您需要多个表之间的数据一致性时。插入大量数据的最快方法是发出多个异步操作。此外,如果您想从文件中加载数据,那么最好使用DSBulk等针对高性能数据加载和卸载进行了高度优化的工具。

有关批次的好坏使用的更多详细信息,您可以在文档和 DSE 架构指南中阅读。

PS 从技术上讲,Cassandra 确实将批次分类为多分区 - 在这种情况下,它们始终被记录,或者单分区 - 它们不被记录。


推荐阅读