Cassandra如何处理并发更新?

sra*_*ras 7 acid cassandra

Cassandra如何处理多个用户对同一密钥的并发更新?Cassandra是否遵循ACID的"隔离"属性?

Aar*_*ron 5

虽然不是真正的ACID兼容,但Cassandra强制执行行级隔离:

例如,如果一个用户正在编写一个包含两千列的行,则另一个用户可能会读取同一行并查看某些列,但如果写入仍在进行中,则不能全部读取所有列.

完整的行级隔离已经到位,这意味着对行的写入与执行写入的客户端隔离,并且在完成之前对任何其他用户都不可见.

对于由不同协调器节点处理的竞争写入,每个列值包含指示何时写入的写时间值.这可确保最近对列的写入占用单元格.换句话说,"最后写赢".

  • @YugSingh 首先,先读后写操作是一种已知的 Cassandra 反模式。原因是您读取的值可能会在写入执行之前发生更改。由于行仅与客户端隔离,因此不会发生更新“正确性”的锁定或验证。在所有更新完成之前,其他任何人都看不到客户端应用程序在一行中更新多列的写入。如果两个客户端在同一行上执行多列写入,则最新的写入时间戳(每列)将确定主要值。 (2认同)

Ste*_*ski 2

Cassandra 为行级更新提供原子性和隔离性保证。您可以在 datastax博客文章中阅读更多相关信息。