【问题标题】:What is row-level isolation?什么是行级隔离?
【发布时间】:2019-07-18 00:46:57
【问题描述】:

说,我想更新age = 20 所在的行,我开始2 个并发更新,在第一个更新中我将20 更改为21,在第二个中我将20 更改为22

具有行级隔离,

  • age = 20 所在的整个行集是否会被隔离,这意味着在我的更新结束时,整个行集将有 2221 for age 无处不在?
  • 或者只有我们正在写入的当前行将被隔离,这意味着在我的更新结束时,这组行将在某些地方有22,而在其他地方有21

【问题讨论】:

    标签: database database-design cassandra


    【解决方案1】:

    您是说age 列存在于多个分区或行中并且您想一次全部更新它们吗?您可以在针对单个分区时实现原子性和隔离性,但在针对多个分区时只能实现原子性。

    请注意,Cassandra 不是 ACID 数据库并且没有事务,尽管您可以使用 paxos(轻量级事务)实现线性化一致性。

    【讨论】:

    • 说,我在第 1 行和第 5 行有age = 20。我用一个事务处理update table t set age = 21 where age = 20 和另一个事务处理update table t set age = 22 where age = 20 来更新表,这两个完成后可能有22在第 1 行和第 5 行的第 21 行?
    • 您所谈论的示例更新在 Cassandra 中是不可能实现的,所以我想这不可能吗? :) 真的,我认为这里的部分误解是没有交易。您可以批量更新分区中的多行,并以原子方式单独应用它们。如果您只是发布一系列更新来更新所有年龄为 22 的行(这很重要,基本上不应该这样做 - 数据模型是错误的),它们不会孤立地发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-23
    相关资源
    最近更新 更多