卡桑德拉批次
Cassandra Batch
我刚开始使用 Cassandra,我有一个常见的问题是
“假设我需要插入将近 2000+ 条记录,大多数人确实在这里说不要使用批处理,但另一边也听说 ”最接近存储过程的功能将是批处理因为它将允许您“捆绑”与插入、更新或删除关联的不同 DML 语句。
所以任何人都可以建议什么是最好的方法,我可以在需要时创建一次,存储和调用多次,这可以支持像 SQL
中的 SP 一样更快的执行
Cassandra 中的批处理有非常具体的用法:
- 一次应用多个更改,通常应用到多个表,以提供数据更新的一致性,保证它们全部应用,否则全部失败。这通常称为“记录的批处理”——在这种情况下,Cassandra 在应用更改之前在多个服务器上复制批处理,并在成功应用批处理操作后删除。因此,这样的批处理比通常的操作要慢得多。
- 在单个分区内应用多个操作——通常称为“未记录的批处理”——在这种情况下,所有操作都被视为一个突变,因此与多个单独的操作相比,这是非常快的。
因此,批处理只能用于单个分区内的多个 inserts/updates/deletes(否则与单个语句相比,您的性能会更差),或者当您需要多个表之间的数据一致性时。插入大量数据的最快方法是发出多个异步操作。此外,如果您想从文件加载数据,那么也许最好使用像 DSBulk 这样的工具,这些工具针对高性能数据加载和卸载进行了大量优化。
您可以阅读 documentation 和 DSE 架构指南,了解有关批次使用优劣的更多详细信息。
P.S。从技术上讲,Cassandra 确实将批次分类为多分区 - 在这种情况下它们总是被记录,或者单分区 - 它们没有被记录。
我刚开始使用 Cassandra,我有一个常见的问题是 “假设我需要插入将近 2000+ 条记录,大多数人确实在这里说不要使用批处理,但另一边也听说 ”最接近存储过程的功能将是批处理因为它将允许您“捆绑”与插入、更新或删除关联的不同 DML 语句。
所以任何人都可以建议什么是最好的方法,我可以在需要时创建一次,存储和调用多次,这可以支持像 SQL
中的 SP 一样更快的执行Cassandra 中的批处理有非常具体的用法:
- 一次应用多个更改,通常应用到多个表,以提供数据更新的一致性,保证它们全部应用,否则全部失败。这通常称为“记录的批处理”——在这种情况下,Cassandra 在应用更改之前在多个服务器上复制批处理,并在成功应用批处理操作后删除。因此,这样的批处理比通常的操作要慢得多。
- 在单个分区内应用多个操作——通常称为“未记录的批处理”——在这种情况下,所有操作都被视为一个突变,因此与多个单独的操作相比,这是非常快的。
因此,批处理只能用于单个分区内的多个 inserts/updates/deletes(否则与单个语句相比,您的性能会更差),或者当您需要多个表之间的数据一致性时。插入大量数据的最快方法是发出多个异步操作。此外,如果您想从文件加载数据,那么也许最好使用像 DSBulk 这样的工具,这些工具针对高性能数据加载和卸载进行了大量优化。
您可以阅读 documentation 和 DSE 架构指南,了解有关批次使用优劣的更多详细信息。
P.S。从技术上讲,Cassandra 确实将批次分类为多分区 - 在这种情况下它们总是被记录,或者单分区 - 它们没有被记录。