sql - 卡桑德拉批次
问题描述
我刚开始使用 Cassandra,我有一个常见问题“假设我需要插入近 2000+ 条记录,大多数人确实说这里不要使用批处理,但另一方面也听说“与存储过程最接近的功能将是批处理,因为它允许您“捆绑”与插入、更新或删除相关的不同 DML 语句。”
因此,任何人都可以建议我可以创建一次、存储并在需要时多次调用的最佳方式,这可以支持像 SQL 中的 SP 那样更快地执行
解决方案
Cassandra 中的批次有非常具体的用途:
- 一次应用多个更改,通常应用于多个表,以提供数据更新的一致性,保证它们都将被应用,或者全部失败。这通常称为“记录批处理”——在这种情况下,Cassandra 在应用更改之前在多个服务器上执行批处理副本,并在成功应用批处理操作后删除。结果,这样的批次比通常的操作慢得多。
- 在单个分区内应用多个操作 - 通常称为“未记录的批处理” - 在这种情况下,所有操作都被视为一个突变,因此与多个单独的操作相比,这非常快。
因此,批处理只能用于单个分区内的多个插入/更新/删除(否则与单个语句相比,您将获得更差的性能),或者当您需要多个表之间的数据一致性时。插入大量数据的最快方法是发出多个异步操作。此外,如果您想从文件中加载数据,那么最好使用DSBulk等针对高性能数据加载和卸载进行了高度优化的工具。
有关批次的好坏使用的更多详细信息,您可以在文档和 DSE 架构指南中阅读。
PS 从技术上讲,Cassandra 确实将批次分类为多分区 - 在这种情况下,它们始终被记录,或者单分区 - 它们不被记录。
推荐阅读
- mysql - mysql IF - 选择 TIMESTAMPDIFF 函数中的 ELSE 语句
- javascript - javascript getHours() 不是函数
- javascript - Firebase 管理员:代表第三方管理 firebase 数据库
- actions-on-google - 发送 NEW_SURFACE 意图的通知时,Google 监听模式处于开启状态
- pine-script - 如何在 pine 脚本中获取特殊栏的编号
- c# - 如何在简单的类库中使用实体框架工具进行迁移
- c++ - 如果您知道我的意思,有没有办法在背景中为 C++(控制台)中的某些区域着色?
- javascript - React 中的状态不随 setState 方法改变
- r - 如何创建一个“不等于”的函数?
- python-3.x - 如何更新 Flask-SQLAlchemy-Marshmallow 中的嵌套对象