NoSQL分布式模型:一致性与持久性
发布日期:2021-07-01 04:08:45 浏览次数:2 分类:技术文章

本文共 746 字,大约阅读时间需要 2 分钟。

放宽一致性约束:在权衡分布式数据库的一致性时,参与交互的节点越多,一致性就越好,但是每新增一个节点,都会使交互操作的响应时间变长。我们可以根据用户对陈旧数据的忍受程度,适当放宽一致性约束,只要求数据的最终一致性。

放宽持久性约束:在某些场合,我们可以牺牲一些持久性以换取更好的性能。如果一个数据库大部分时间都在内存中运行,那么我们可以把更新操作直接写入内存,并且定期将数据变更写会磁盘。这会大大提高响应请求的速度,但是一旦服务器发生故障,任何尚未写回磁盘的更新数据都将丢失。我们可以在每次发出写入请求时,指定该请求所需的持久性,这样就可以把某些极为重要的更新操作立刻写回磁盘。但是针对保存会话状态,则可以使用上述方案。

仲裁:对于一致性和持久性之间的取舍,有一个很好的解决方案,就是写入仲裁和读取仲裁。

例如,某份数据被复制到了三个节点中。为了保证强一致性,不需要所有的节点都确认写入操作,只需要其中两个节点(超过半数)确认就可以了。在这种情况下,如果发生两个相互冲突的写入操作,那么只有其中一个操作能为超过半数的节点所认可。这就是写入仲裁。即参与写入操作的节点数(W),必须超过副本节点数(N,复制因子)的一半,W>N/2。

而此时读取操作需要两个节点来确认,即至少要联系两个节点,才能保证读取到最新的数据。(W=2,R=2)这就是读取仲裁

只有当W+R>N时,才能保证读取数据的强一致性。

即使一个集群中有100个节点,复制因子也可能仅等于3,因为大部分数据都是分片存储在各个节点上的,但是有说法称3个复制因子就可以获得足够好的故障恢复能力了。

例如:N=3,W=3,R=1,此时写入操作比较慢,因为需要三个节点全部确认写入操作,但是可以保证读取时从任何一个节点读到的数据都是最新数据。


转载地址:https://mortal.blog.csdn.net/article/details/83007341 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:NoSQL:版本戳
下一篇:NoSQL分布式模型:分片和复制

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月10日 08时50分11秒