【发布时间】:2017-11-23 04:31:53
【问题描述】:
这是一个设计级别的问题,
我有一个节点设置,例如节点 N1、N2 和 N3,我的应用程序和数据库(目前认为是 Cassandra)在所有 3 个节点中运行。
我需要为以下场景提供数据一致性,有人可以提供答案吗?
- 线程 (T1) 尝试编辑节点 N1 中的数据
- 线程 (T2) 尝试从节点 N2 编辑相同的数据
- 只有一次写入应该成功
在这种情况下,Cassandra 会发生什么?
有没有办法通过应用程序/Cassandra 数据库提供并发?或者任何算法?
除了 Cassandra 中的 LWT。
【问题讨论】:
-
Cassandra 将一行分成几列。如果在同一行但在不同的列上有多个更新,则不会有问题,因为更新将是独立的。当线程更改相同的列单元格时会出现问题。在这种情况下,最后一次写入获胜。每个突变(更新、删除)都有一个与之关联的时间戳,Cassandra 将选择最近的时间戳。阅读这些内容可能会有所帮助 stackoverflow.com/questions/34898693/… 和 datastax.com/dev/blog/why-cassandra-doesnt-need-vector-clocks
-
谢谢@Horia,我明白这一点,但我想知道在应用程序中是否有更好的技术来处理它以提供并发性?
-
为什么 LWT 不适合你?
-
写入时存在很多性能问题,不支持分区。您对应用层并发有什么建议吗?
-
@Harry 只要您只读取/写入一个分区,就不会出现任何大的性能问题。因此,在您只写一个值的情况下,这很好。因此,您想要的正是 Oresztesz 在下面回答的内容。您想使用 CL=QUORUM 因为大多数节点将始终具有最新值。与 LWT 配对将确保数据在写入时不会更改。
标签: cassandra nosql consistency data-consistency