AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

MongoDB 4.0 有望支持跨文档事务

  • 2018-02-23
  • 本文字数:1023 字

    阅读完需:约 3 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

自 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 4.0 to Include Multi-Document Transactions

2018-02-23 18:002979
用户头像

发布了 391 篇内容, 共 143.3 次阅读, 收获喜欢 257 次。

关注

评论

发布
暂无评论
发现更多内容

视野 | KeyDB:为 Web 应用而生的高性能 Redis 分支

RadonDB

数据库 redis 后端 RadonDB

Hadoop运行环境搭建

编程江湖

hadoop

【初探云原生】服务注册中心对比总结

路上的小崔哥

微服务 云原生 注册中心

一个老程序员的计算机视觉蹒跚学习之路| 社区征文

老猿Python

AI OpenCV 计算机视觉 图像处理 新春征文

创业方法论(10/100)

hackstoic

创业 商业分析

Spring Cloud Alibaba Nacos 服务注册与发现功能实现!

王磊

SpringCloud Alibaba

盘点下近几年退役的顶级 Apache 大数据项目 - 继 Sentry,Sqoop 之后,Ambari 正式退役

明哥的IT随笔

大数据 ambari sqoop sentry

微服务从代码到k8s部署应有尽有系列(一)

万俊峰Kevin

Go 微服务 web开发 go-zero RPC框架

Serverless 年终技术盘点 :工业、学术、社区遍地开花

Serverless Devs

云计算 阿里云 Serverless

架构实战营 毕业设计项目

红莲疾风

「架构实战营」

JS事件详解和js事件委托

编程江湖

GitLab + Jenkins + ACK 自动化部署方案

百瓶技术

运维 jenkins 自动化部署 #GitLab ACK

Java常见数据结构详解

编程江湖

Apache Druid 在 Shopee 的工程实践

Shopee技术团队

数据库 后端 Apache Druid

Serverless 应用优化四则秘诀

Serverless Devs

Serverless

Pulsar 在云原生消息引擎领域为何如此流行?| 社区征文

老周聊架构

云原生 Apache Pulsar 新春征文 2月月更

聚力同行,迈向零碳未来

大咖说

云计算 阿里巴巴 阿里云 数智化

为什么你辛苦肝的博客没人看?搭框架、排版、画图技巧这些你真的懂么?

码哥字节

排版规范 写作技巧 2月月更

暂时不在更新

你?

Python代码阅读(第74篇):单词首字母转换成大写

Felix

Python 编程 字符串 阅读代码 Python初学者

人人都是 Serverless 架构师 | 弹幕应用开发实战

Serverless Devs

Serverless 弹幕 应用开发

JavaScript 数组常见操作 (二)

编程三昧

JavaScript 前端 2月月更

《也许你该找个人聊聊》读书笔记 - 直面的勇气

懒时小窝

读书笔记 读书感悟

了解一下DDD领域驱动设计

蜜糖的代码注释

Java DDD 领域模型 2月月更

一人走路不孤独,小度化身百度地图导航NPC,伴你回家路

百度大脑

让所有工具变成你的锤子 — 邂逅《Every Tool's a Hammer》

蔡超

方法论 学习笔记 软件架构

云效交付篇:流水线持续交付 | 云效快速入门

阿里云云效

阿里云 DevOps 云原生 持续交付 研发

一个cpp协程库的前世今生(二十五)channel

SkyFire

c++ cocpp

Web Components系列(一) —— 概述

编程三昧

前端 组件化 2月月更

JVM进阶(十):年老代收集器

No Silver Bullet

CMS JVM 2月月更 年老代收集器

JVM进阶(十一):JAVA G1收集器

No Silver Bullet

G1 JVM 垃圾收集器 2月月更

MongoDB 4.0有望支持跨文档事务_架构_Jonathan Allen_InfoQ精选文章