mongodb的ACID特性与mysql,redis简单比较
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mongodb的ACID特性与mysql,redis简单比较,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2383字,纯文字阅读大概需要4分钟。
内容图文
持久化:
写有同步与异步模式。通过参数调整在持久化与性能之间平衡。
{ w: <value>, j: <boolean>, wtimeout: <number> }
w:majority:写请求已被传播到多数节点,(含主节点)才确认。日志是否已持久化看参数j
j:true w指定数量节点或多数节点日志已持久化才确认。
读和写模式密切相关。写日志持久化与否影像到读的一致性。
当j:false时,日志并未持久化到硬盘,只是在内存中,所以此时failover都有可能出现读不一致。
读:
readPreference
控制从复制集的哪个节点读取数据,这个特性可方便的实现读写分离、就近读取等策略。默认primiry。readConcern 用来控制读一致性,用户可以在性能和一致性之间取舍
The readConcern
option is available for the following operations:
-
find
commandaggregate
command and thedb.collection.aggregate()
methoddistinct
commandcount
commandparallelCollectionScan
commandgeoNear
commandgeoSearch
command
为简化讨论,下面讨论基于w:majority,j:true,readPreference:primiry
常见场景:遍历find返回的cursor。
-
- local 默认,总是读取最新的数据,表明客户端可以看到还未被持久化的数据。集群环境下,可能只有primiry完成写,而不是多数节点完成。这时primiry failover后再上线会回滚数据。(会出现读未提交。)
- majority 返回已被多数节点写成功的数据。注意多数确认写成功可能不是最新的(因为最新的可能只有primiry成功了,而不是多数成功)。(隔离并发的未提交写)
- linearizable ,返回已被多数节点确认为写成功,且早于本次读之前修改的数据(所有并发写都被隔离)。
- mysql 提供多语句打包事务语法(begin,commit)事务是并行的,通过隔离级别来提供一致性,提供行锁来保证资源不会被并发修改。
- redis提供多语句打包事务语法(multi,exec)事务是串行执行的,不会并发修改,不提供锁,但是通过watch机制保证在事务执行前资源被修改终止当前事务执行。另外因为串行事务的隔离界别,不会有并发修改。
- mongo 无多语句事务语法。另外单条update涉及多文档时也非原子执行。find涉及多文档时可以通过
readConcern进行并发修改隔离。
不支持mysql中常见的多表多行的事务,也不支持单表多行事务,其批量语法可能部分成功,只能使用补偿机制,达到最终一致性。 - mongo针对update涉及多文档时,提供的
$isolated可以保证update多文档不会有并发访问。但是不提供回滚。(不支持分片集群。)
- mongo的 two-phase commits 提供transaction-like semantics.
- mongo建议使用唯一索引和版本控制并发。这在mysql中也很常见。
mongodb的ACID特性与mysql,redis简单比较
标签:版本 操作 multi 成功 div 持久化 级别 count 上线
本文系统来源:http://www.cnblogs.com/reachlins/p/7600938.html
内容总结
以上是互联网集市为您收集整理的mongodb的ACID特性与mysql,redis简单比较全部内容,希望文章能够帮你解决mongodb的ACID特性与mysql,redis简单比较所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。