如何在只提供最终一致性的数据库上创建应用程序



Cassandra和许多其他类似的系统不提供事务支持。相反,它们提供了最终的一致性,这意味着系统的编写器最终将处于一致状态。有没有关于我如何使用来模拟事务可以模拟的东西的例子?

我理解,在某些情况下,我们需要最终的一致性。例如,我们可以很容易地容忍社交网络中的朋友列表并不总是最新的,等等。但如果出现酒店预订或汇款等系统,我们该怎么办?谷歌应用程序引擎有实体组,我们能在一个提供最终一致性的系统中以某种方式模仿它们吗?

在哪里可以找到类似架构的示例?

您可以在没有事务的情况下实现分布式一致性(对于单个操作),但不能实现原子性

Cassandra支持可调一致性级别(CL)——您可以为每次读写指定一致性级别。看见http://wiki.apache.org/cassandra/API.

这些级别的范围从CL.ANY(最初从单个节点读取或向单个节点写入)到CL.ALL(以牺牲可用性为代价提供完全一致性)。

然而,它并没有为您提供将操作分组为原子事务的方法,从而使它们全部成功或全部失败(尽管我认为同一行上的多个操作是原子的,但不是独立的)。

另请参阅:

  • Cassandra-事务支持
  • 使用Cages锁定和交易Cassandra
  • Cassandra中模拟事务的最佳实践

最新更新