NOSQL 中跨节点的数据一致性
Data consistency across nodes in NOSQL
这是一道设计题,
我有一个像节点 N1、N2 和 N3 这样的节点设置,我的应用程序和数据库(现在被认为是 Cassandra)在所有 3 个节点中运行。
我需要为以下场景提供数据一致性,有人可以提供答案吗?
- 线程 (T1) 尝试编辑节点 N1 中的数据
- 线程 (T2) 尝试编辑来自节点 N2 的相同数据
- 只有一个写入应该成功
这样的话,Cassandra会发生什么?
有没有办法通过应用程序/Cassandra 数据库提供并发性?或者任何算法?
除了 Cassandra 中的 LWT。
Cassandra 提供 tunable consistency。在您的情况下,这仅意味着,如果您提供 CL=QUORUM
用于写入,它将同步到 3 个节点中的 2 个。读取将与 CL=QUORUM
一致,因为您将从 3 个节点中的 2 个节点获得结果,因此存在重叠。
对于写入,Cassandra 提供了最后写入获胜的机制。这意味着独立于一致性级别 reader 将看到 T1 或 T2 线程的写入,具体取决于读取发生的时间。稍后 reader 只会看到最新的写入。
如果你想要锁定机制,你可以使用offline concurrency patterns in your application layer, like optimistic or pessimistic offline lock。
一些持久性管理框架提供了这些开箱即用的模式实现。
这是一道设计题,
我有一个像节点 N1、N2 和 N3 这样的节点设置,我的应用程序和数据库(现在被认为是 Cassandra)在所有 3 个节点中运行。
我需要为以下场景提供数据一致性,有人可以提供答案吗?
- 线程 (T1) 尝试编辑节点 N1 中的数据
- 线程 (T2) 尝试编辑来自节点 N2 的相同数据
- 只有一个写入应该成功
这样的话,Cassandra会发生什么?
有没有办法通过应用程序/Cassandra 数据库提供并发性?或者任何算法?
除了 Cassandra 中的 LWT。
Cassandra 提供 tunable consistency。在您的情况下,这仅意味着,如果您提供 CL=QUORUM
用于写入,它将同步到 3 个节点中的 2 个。读取将与 CL=QUORUM
一致,因为您将从 3 个节点中的 2 个节点获得结果,因此存在重叠。
对于写入,Cassandra 提供了最后写入获胜的机制。这意味着独立于一致性级别 reader 将看到 T1 或 T2 线程的写入,具体取决于读取发生的时间。稍后 reader 只会看到最新的写入。
如果你想要锁定机制,你可以使用offline concurrency patterns in your application layer, like optimistic or pessimistic offline lock。 一些持久性管理框架提供了这些开箱即用的模式实现。