【问题标题】:Understanding of Isolation in Cassandra Db理解 Cassandra Db 中的隔离
【发布时间】:2019-05-24 08:38:50
【问题描述】:
根据 Cassandra 中的 Cassandra docs 隔离提供行级隔离。这意味着对单个节点上单个分区内的行的写入仅对执行操作的客户端可见。
现在我假设在 cassandra 文档中通过 write 表示插入和更新。
我的问题是:
考虑一个场景,我正在更新一行,同时其他用户也在更新同一行。现在由于 Cassandra 提供的隔离保证,我们无法确定更新行的最终状态。
从上面的陈述看,我对 Cassandra db 中的隔离的理解是否正确?
【问题讨论】:
标签:
database
cassandra
nosql
cassandra-3.0
isolation
【解决方案1】:
隔离意味着在更新期间阅读时,人们要么看到对该行应用的整个更新,要么看不到任何更新。即,如果行中有age 和favorite_color 列,并且他们正在更新这两列,那么阅读的人要么会看到整个旧版本,要么会看到整个新版本。他们不会将age 视为旧值并将favorite_color 视为新版本。
对行的写入 [...] 在完成之前对任何其他用户都是不可见的
为了防止两个更新程序同时写入的竞争条件是一个不同的问题,这可以通过轻量级事务(使用 paxos 轮次在写入前读取)解决,其中只有一个写入会“获胜”,而另一个查询会报告它未应用。