NoSQL数据库:读取一致性怎么样?

时间:2012-04-27 12:54:03

标签: mongodb couchdb acid oracle-nosql nosql

从我可以看出,NoSQL数据库可能是高强度数据读取应用程序的一个很好的选择,但是如果你还需要做很多数据更新并且事务性对你来说非常重要(那么与没有ACID合规性)。对?太简单了。

但无论如何,假设我部分正确,至少我现在担心NoSQL数据库如何维护您正在阅读或写入的数据的“读取一致”视图。或者他们呢?如果他们不这样做,那不是一个非常大的问题吗?

我的意思是,如果您正在读取(或更新)的数据在读取时发生变化,那么您可能会得到一个不一致/脏的结果集。来自Oracle rdbms背景,所有这些都只是为您处理,我发现如何缺乏读取一致性只是一个大问题令人困惑。很可能是因为我错过了关于这一切的一些关键点。有人可以让我直截了当吗?

4 个答案:

答案 0 :(得分:4)

我是Oracle NoSQL数据库的开发人员,将回答您关于该特定NoSQL系统的问题。

Oracle NoSQL Database API允许程序员在每次API调用时指定读取一致性级别。从最严格到最宽松的四个可能值是绝对值,时间值,版本值和无值。 Absolute说始终从复制主机读取,以便返回最新的值。 “时间”表示系统可以从任何副本返回至少在主节点的特定时间增量内的值(例如,从主节点的2秒内读取任何副本的值)。对系统的每次读写调用都会返回“版本句柄”。当指定Consistency.Version时,可以将此版本句柄传递给任何读取调用,并且它告诉系统从任何至少与该版本一样最新的副本进行读取。这对于Read Modify Write(aka CAS)场景非常有用。最后一个值Consistency.None表示可以使用任何副本(即没有保证一致性)。

我希望这有用。

查尔斯兰姆

答案 1 :(得分:2)

NoSQL数据库可以读取一致,但如果严格来说通常不是大问题,请查看CAP theorem。在这个领域已经进行了大量的研究,我建议阅读Amazon's Dynamo paper以快速查看分布式系统(如NoSQL数据库)所面临的一些问题和解决方案。

答案 2 :(得分:2)

MongoDB允许应用程序使用“写入关注”选择所需的读取一致性级别。这个概念允许您的应用程序阻塞,直到满足给定写入的特定条件。

举例来说,只要将操作传递给主服务器,就可以考虑任何写入成功。或者,您可以阻止,直到写入已传播到副本集中的大多数节点。通过这种方式,您可以将性能/一致性与品味相结合。

答案 3 :(得分:1)

这取决于您使用的NoSQL数据库,因为每个数据库实现不同的策略。例如,您可以阅读Riak's explanation他们的“最终一致性”模型或Lars Hofhansel在ACID in HBase上的文章