1

我正试图将我的大脑包裹在特别是 Riak 的 NoSQL 上。看看 CAP 定理,我很难理解一致性是如何发生的。比如说,我有一家网上商店。我有 6 件商品要出售。2 个人想购买这些物品。第一个人想要购买其中的 2 件,而第二个人想要购买全部 6 件。这两笔交易几乎立即发生。这将如何做到第二个人不购买幻影商品?

我在想,我的头上,使用读/写锁。我认为这可能是可用性的问题。

我还在 Commutative Replicated Data Types 上看到了一些东西。仍在阅读有关它的期刊,但有人对 Riak 有任何见解吗?

先感谢您。

4

1 回答 1

4

这个问题不是 Riak 或 NoSQL 所特有的,而是一般的分布式系统。如果您使用 mysql 之类的关系数据库来跟踪库存,并在 2 台或更多台服务器之间复制该数据,则您的应用程序需要设计为确保您不会根据服务器 2 的可用性报告转售商品服务器 1 刚刚处理了出售最后一个交易的交易,但尚未复制。在任何一种情况下,如果您不想为运输/生产延迟向客户道歉,您都需要处理锁定或序列化购买请求。

特别是使用 Riak,您可以通过使用读取和写入仲裁来调整可用性/一致性以满足您的需求,有选择地失败操作,例如在主副本不可用时必须保持一致的最终购买,同时仍然允许不太关键的操作,例如浏览库存接着说。即,您可以在查询时选择一致性而不是可用性,反之亦然。

于 2014-04-04T18:09:22.910 回答