Cassandra中的BATCH语句和SQL中的Transaction有什么异同?

What are the similarities and differences between a BATCH statement in Cassandra and a Transaction in SQL?

Cassandra 的目标Batch statement is to group statements on the one partition together in a single atomic operation (all pass or fail together)。

这与 SQL Transaction 的工作方式非常相似。

对我来说,主要区别似乎在于,对于 SQL 事务,您会在它的末尾得到一个 ACID consistency guarantee,这不一定是通过 Cassandra Batch 语句获得的。

我的问题是:Cassandra 中的 BATCH 语句与 SQL 中的事务有何异同?

Cassandra 仅支持分区级别的原子性和隔离性

Cassandra does not use RDBMS ACID transactions with rollback or locking mechanisms, but instead offers atomic, isolated, and durable transactions with eventual/tunable consistency that lets the user decide how strong or eventual they want each transaction’s consistency to be.

As a non-relational database, Cassandra does not support joins or foreign keys, and consequently does not offer consistency in the ACID sense

阅读更多:http://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlTransactionsDiffer.html

答案已经在你的问题中:一个分区

这意味着,C* 的批处理不是像 RDBMS 中的事务那样保持一致性和原子性的通用工具。使用 C* 批处理无法在节点之间保持严格的原子性和一致性,因此在业务用例集中,有许多“事务”可能/应该是原子的,但您不能使用 C* 批处理来确保,因为包含这些“交易”的数据被拆分到多个节点上。