MongoDB 并购了 WiredTiger 及其关系数据库存储引擎以来, 很多技术专家一直翘首以待 MongoDB 何时提供对跨文档事务 (multi-document transaction) 的支持 MongoDB 在本周宣布, 跨文档事务有望于今年夏天加入到 MongoDB 4.0 中
据 MongoDB 的 Grigori Melnik 宣称, 80% 到 90% 的应用是完全不需要跨文档事务的然而他的说法有待商榷, 在层次数据库中很有可能存在大量的反规范化 (denormalized) 数据, 此类数据需要支持多地同时更新以确保一致性 Melnik 继续指出:
此外, 一些开发人员和数据库管理员受限于业已存在 40 多年的关系数据建模, 总是误以为多表或多文档事务是所有数据库的要求, 无论实际需要构建何种数据模型其他一些人则担心, 虽然他们的应用当前不需要跨文档事务, 但将来可能会需要, 他们不希望过度扩展他们的数据库
跨文档事务是 ACID 的基石 MongoDB 自 3.0 版起, 开始支持跨文档事务在 3.0 版中, MongoDB 具备了多版本并发控制 (MVCC) 技术, 该技术是一种快照隔离技术, 通常是由 PostgreSQL 和 Oracle 等关系数据库提供最新版本的 SQL Server 也使用 MVCC 实现其内存优化表
MongoDB 3.2 增加了对读取关注 (Read Concern) 的支持在 3.2 版之前, 客户只有知道进行通信的节点时, 才会接收数据读取关注功能允许客户请求为大多数节点所知的数据需要注意的是, 根据文档介绍, 无论读取的关注级别, 节点上的最新数据可能并未反映系统中数据的最新版本
MongoDB 之后在 3.6 版中提供了其所宣称的因果一致性在以前的 MongoDB 版本中, 并不能保证操作是按指定顺序进行的例如, 当删除一组记录后再执行一次读取操作时, 可能会返回刚被删除的记录使用因果一致性, 用户可以指明读取操作取决于写操作的结果, 确保了在执行读取操作之前先完成删除操作
最后一点, MongoDB 4.0 将提供执行一致性读取的能力也就是说, MongoDB 只返回数据库在读取操作开始时已知的数据正如在 InfoQ 文章 [事务隔离级别和脏读的快速入门]http://www.infoq.com/cn/articles/Isolation-Levels) 中所介绍的, 以前版本的 MongoDB 返回的结果可能和任何时间点都不一致它甚至可能跳过一些文档, 或是在一次查询中返回同一文档的多个版本
希望想要试用跨文档事务的开发人员, 积极加入到 MongoDB 4.0 beta 计划中
更多 MongoDB 相关教程见以下内容:
MongoDB 文档集合数据库简介 http://www.linuxidc.com/Linux/2016-12/138529.htm
MongoDB 3 分片部署及故障模拟验证 http://www.linuxidc.com/Linux/2016-12/138529.htm
Linux CentOS 6.5 yum 安装 MongoDB http://www.linuxidc.com/Linux/2016-12/137790.htm
CentOS 7 yum 方式快速安装 MongoDB http://www.linuxidc.com/Linux/2016-11/137679.htm
MongoDB 的查询操作 http://www.linuxidc.com/Linux/2016-10/136581.htm
在 Azure 虚拟机上快速搭建 MongoDB 集群 http://www.linuxidc.com/Linux/2017-09/146778.htm
MongoDB 复制集原理 http://www.linuxidc.com/Linux/2017-09/146670.htm
MongoDB 3.4 远程连接认证失败 http://www.linuxidc.com/Linux/2017-06/145070.htm
Ubuntu 16.04 中安装 MongoDB3.4 数据库系统 http://www.linuxidc.com/Linux/2017-07/145526.htm
MongoDB 权威指南第 2 版 PDF 完整带书签目录 下载见 http://www.linuxidc.com/Linux/2016-12/138253.htm
MongoDB 的详细介绍: 请点这里
MongoDB 的下载地址: 请点这里
来源: http://www.linuxidc.com/Linux/2018-02/151059.htm