【问题标题】:Cassandra concurrent row updatesCassandra 并发行更新
【发布时间】:2017-01-17 20:17:49
【问题描述】:

Cassandra 如何保证对多个并发列插入到宽行中的列进行排序?据我所知,Cassandra 没有行锁。

【问题讨论】:

    标签: cassandra fwrite


    【解决方案1】:

    在 Cassandra 中,写入在行级别是原子的,这意味着在一行中插入或更新列被视为一次写入操作。

    Cassandra 不支持将多行更新绑定到一个全有或全无操作的事务。在 Cassandra 中,可能会有写入操作向客户端报告失败,但实际上会将写入持久化到副本。

    考虑到插入实际上大部分时间是内存中的操作,因此保持单个分区(行)排序并插入到它相对简单,并且以“类似 redis”的速度完成。

    Cassandra 使用时间戳来确定列的最新更新(如果同时有多个更新)。

    对于发生在内存中的操作,旧条目将被简单地忽略。

    时间戳由客户端应用程序提供或在协调节点处设置。请求数据时总是以最新的时间戳为准,因此如果多个客户端会话同时更新同一行中的相同列,则最新的更新将最终持续存在。

    如果您有兴趣,可以深入了解一下:

    https://github.com/apache/cassandra/blob/b02dec3da539d181544cfb0288102d6073f36264/src/java/org/apache/cassandra/db/Memtable.java#L262

    【讨论】:

    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 2019-11-23
    • 2016-09-19
    • 2017-06-15
    • 2015-11-09
    相关资源
    最近更新 更多