MongoDB 4.2已经发布,我们来看看它增加了哪些新特性?分布式事务?数据库加密?通配符索引?

在2019年MongoDB World大会上,CTO Eliot Horowitz介绍了MongoDB 4.2中的一些功能,这些功能扩展了其在数据库技术方面的领先地位:分布式事务(Distributed Transactions),字段级加密(Client Side Field Level Encryption),通配符索引(Wildcard Indexing)、按需物化视图(Materialized Views)。

这些都是重大的改进,表明MongoDB在企业级功能方便更加完善。

MongoDB 4.2提升了事务和分析技术水平。它提供大规模的分布式事务的ACID担保和复杂的数据处理流程,还有最先进的加密控制保护机制。我们可以在任何地方运行MongoDB4.2:在本地数据中心,云上、混合云、Atlas云上。我们可以获得阿里云、AWS,Azure和GCP可用的完全托管,云原生的MongoDB服务。阿里云全球第一个实现了MongoDB异地多活架构。可以支持互联网跨国公司的大规模出海业务。

现在使用MongoDB的公司越来越多了,技术架构方案也越来越成熟。MongoDB新特性也是为了满足更多的企业级业务场景需求。

1. MongoDB 4.2 新特性

先来大体上看看有哪些改进,作为4.0的加强版,事务特性做了增强,之前支持跨文档事务(复制集群),现在支持分布式事务(分片集群)。索引功能也进行了小改动,支持通配符索引,其实类似我们知道的ES搜索的字符匹配搜索,而且是不定字段模式。安全性也开始全库加密和特定字段加密。

  • ACID保证:分布式,跨分片集群节点分布式事务,全局时间点读取和可变分片键值。

  • 查询和分析:Atlas Data Lake,按需物化视图,通配符索引和MongoDB图表,用于丰富数据可视化。

  • 弹性和伸缩性:可重试的读写,集群新节点选举速度提高10倍,Zstandard压缩

  • 企业安全性:客户端字段级加密,支持支持无停机多个CA机构证书轮换,降低了3倍数据库审计的开销成本。

  • 随处运行:Atlas自动扩展,全文搜索服务,以及支持与Kubernetes和Apache Kafka集成。
    K8s也是火爆的不行,面试处处问容器,技术圈子好装逼,复杂的配置容器还是难以实现,还是需要人工介入。

2. 分布式事务

事务从跨文档事务级别,扩展到分片集群的分布式事务级别。用不用先不说,有了这个功能,起码部分特殊业务场景可以作为备选方案。

4.2版本已经发布,4.0的多文档ACID事务支持的分布式事务,MongoDB4.2扩展提供更高级别的事务功能。使用分布式事务,事务将能够跨MongoDB Atlas的全局集群工作,并允许大型分片部署(包括跨多个区域的部署)来处理这些操作。

分布式事务在保持多语句操作的完全原子性的同时完成所有这些操作。如果任何事务无法在分片上提交,则会中止该事务中涉及的所有分片操作。比较好的一点就是使用4.2分布式事务与使用4.0的多文档事务完全相同。这意味着我们可以使用相同的熟悉的关系式事务语法,并且在扩展分布式事务时,客户端代码不需要修改。做到无缝迁移。

MongoDB4.2引入分布式事务引入同时来带来了许多其他新功能。例如,可变的分片键值key,更大规模的事务,驱动程序端的帮助类和记录度量数据,都使得开发更加容易。以可变分片键值为例。由于能够更改数据记录的主键key,该记录可以在分片集群之间迁移数据,从而允许全局重新分配数据或分层存储归档旧的数据,只要能在60秒的事务运行时间限制内完成即可。

有了分布式事务,MongoDB现在可以支持大多数业务场景,比如极端数据一致性要求的电商、支付、订单等场景:文档级ACID事务,跨多文档事务,到全局分布式集群事务。

3. 客户端字段级加密

全库加密比较简单,很多数据库也开始支持,但是字段级加密,复杂度比较高,但是加密策略会更加灵活,很多时候只需要对敏感字段加密,比如价格,或者供应商的手机号加密。MongoDB4.2的这个新特性还是比较实用的。当然之前大多数加密需要应用开发人员自己实现。

MongoDB提供了一系列安全选项,从端到端加密(E2E)实时加密到静止数据加密,细粒度的基于角色的访问控制(RBAC)和全面的审计功能。由于某些特殊的法律所要求的严格性,可能有时候需要从数据库中安全地选取,查询和存储加密数据,而这些加密后的数据,数据库却不能读取解密,这个也就是客户端加密,严格保证数据库的安全性。

这个是必须始终在数据库中加密并且仅在客户端解密的数据加密模式。MongoDB新的Field Level Encryption新特性就是为了解决这一挑战。使用此功能,服务器不知道要加密的字段。所有加密和解密都在驱动程序级别完成。

它是驱动程序,当它看到写入或查询命令中涉及加密字段时,从密钥管理器获取适当的密钥,加密数据并将其发送到服务器。然后服务器只看到密文并且不知道密钥。当从服务器返回结果时,服务器将该密文发送给驱动程序,并且已经有密钥的驱动程序对其进行解密。从应用程序的角度来看,这种机制是完全透明的,客户端应用完全不知道数据库进行了什么加密操作。

密钥管理也远离数据库,可以将密钥绑定到单个记录或用户账号。这样也使得删除用户加密信息变得容易。通过删除密钥管理系统中的相关密钥,可以有效地删除使用该密钥加密的所有数据。这也意味着我们可以安全地使用MongoDB Atlas等托管服务,因为他们知道数据永远不会在日志,内存或基础架构的任何其他部分中以未加密的方式显示。

如果你曾经手工写过数据库数据加密代码,肯定理解加密和解密,以及保证秘钥安全性等规则的复杂程度,数据库数据加密简单的对称加密很好理解,关键还涉及到秘钥的保存,安全性、以及加密算法和字段的灵活替换,还有客户端和数据库端如何做到加密解耦。那么MongoDB 4.2中的字段级加密的简洁设计可以帮助我们解决这个问题,真正提高大家的工作效率。

2019年国家出台法律法规,要求大型互联网、金融、政府机构必须通过严格的等级保护审查,相信这个功能非常的及时。当然如果你有更复杂的等保安全需求,可以联系我,也可以联系阿里云,中国唯一的通过等保三级和金融云等保4级的云计算公司。阿里云安全团队有丰富的经验可以帮助客户建立严格的安全系统,通过等保评审。

注:被攻击或者数据泄露多了一层防护,起码不会立即被破解,导致大规模的数据风险,又加上等保的法规,很多公司必须要做系统安全,这是不错的一个解决方案。

4. 通配符索引

索引大家都很熟悉,数据库基本都有自己的索引机制,而且支持的索引类型差别也比较大,MySQL、Oracle、ES、Hbase都有自己的实现,索引类型和算法差别很大。Mongodb4.2新增的通配符索引,也比较特殊,说白了就是某个字段不确定,某些字段确定,但是可能需要针对不确定的字段做快速搜索匹配,这个和全文索引差别还比较大,应该是为Document级别的数据提供了更多的索引灵活度。

通配符索引是灵活文档模型提出的问题的答案; 我索引建立在什么字段上,要查询什么字段,一切可能都不确定?虽然有时候很容易分辨哪些字段创建索引,但有些情况下还是比较难以判断。例如,我们电商网站可能在子文档中有一组可变字段来表示商品的特征,并且当销售从衣服到汽车、手机、化妆品等的所有商品时,这些字段有很多不同的特征,但是用户希望快速搜索到这些商品。使用MongoDB4.2的通配符索引,可以为该子文档中的所有特征字段创建索引,并创建一个涵盖所有这些字段及其值的索引。

大家想了解详细信息,可以阅读官方文档“MongoDB 4.2-1:通配符索引”中阅读有关此新特性的更多信息,
https://www.mongodb.com/blog/post/coming-in-mongodb-42–1-wildcard-indexes

如果有基于MongoDB的社交APP或者电商App,比如某些商品的标签、或者某些个人的标签,后期有搜索某个标签的人群,比如搜索喜欢动漫、健身、跑步、音乐标签的人群,这个索引就比较合适。轻量级APP平台可以基于MongoDB快速实现。而又不需要ES这种全文搜索的海量数据规模。一定程度上降低了数据搜索的体量。

5. 物化视图

这个功能特性的目的,就是缓存计算结果,以便于后期高并发反复使用此前的计算结果。达到改善数据库性能的目的。

MongoDB4.2支持创建数据集视图,向客户端应用程序呈现大数据分析的结果,预计算(提前计算)或仅过滤数据集部分结果。所需要的只是将$out运算符放在MongoDB聚合管道的末尾以创建新集合来缓存分析的数据结果。当我们想要更新结果时,可以重新运行命令并再次写出所有记录。

在MongoDB 4.2中更加简单,方便,不需要每次重新运行全部命令:我们可以使用新的$merge运算符来更新视图集合。可以控制新文档的更新方式,并可以在新视图上使用索引以加快访问速度。再提一个优点,物化视图可以分片存储,并且可以完全控制视图的更新时间。

MongoDB 4.2 下载

可以下载最新的4.2版本,安装试用
https://www.mongodb.com/download-center/community

参考资料:
https://www.mongodb.com/collateral/mongodb-4.2-guide-to-what-is-new
https://www.mongodb.com/new

文章来源:MongoDB中文社区

作者:徐雷
MongoDB中文社区联席主席;
《MongoDB实战》第2版译者;
阿里云大学讲师;阿里云栖社区讲师;
目前就职于阿里巴巴,架构师。

参考资料:<a href="https://www.mongodb.com/collateral/mongodb-4.2-guide-to-what-is-new">https://www.mongodb.com/collateral/mongodb-4.2-guide-to-what-is-new</a><a href="https://www.mongodb.com/new">https://www.mongodb.com/new</a>

作者:徐雷  MongoDB中文社区联席主席; 《MongoDB实战》第2版译者;  阿里云大学讲师;阿里云栖社区讲师;  目前就职于阿里巴巴,架构师。

MongoDB 4.2新特性:分布式事务、字段级加密、通配符索引、物化视图的更多相关文章

  1. MongoDB 4.2 新特性解读 (转载)

    MongoDB World 2019 上发布新版本 MongoDB 4.2 Beta,包含多项数据库新特性,本文尝试从技术角度解读. Full Text Search MongoDB 4.2 之前,全 ...

  2. MongoDB 3.0 新特性【转】

    本文来自:http://www.open-open.com/lib/view/open1427078982824.html#_label3 更多信息见官网: http://docs.mongodb.o ...

  3. 利用flashback transaction query新特性进行事务撤销

    具备了flashback version query查询的基础,我们就可以进行基于flashback version query的恢复.这就是flashback transaction query.f ...

  4. 简单概括下MongoDB 4.0 新特性

    (1)跨文档事务支持 (ACID) 首个支持跨文档事务的NoSQL云数据库,将文档模型的速度,灵活性和功能与ACID保证相结合.现在,使用MongoDB解决各种用例变得更加容易. (2)40%迁移速度 ...

  5. Oracle 12C 新特性之表分区带 异步全局索引异步维护(一次add、truncate、drop、spilt、merge多个分区)

    实验准备:-- 创建实验表CREATE TABLE p_andy(ID number(10), NAME varchar2(40))PARTITION BY RANGE (id)(PARTITION ...

  6. 数据库比对工具SQL(表、字段、触发器、索引、视图、存储过程)

    做一个数据库比对小工具,把SQL做一个笔记 SELECT object_id AS ID --表ID,'表' sType,Name --表名FROM sys.tablesORDER BY Name-- ...

  7. Xcode8 带来的新特性和坑

    Xcode8新特性 Interface Builder 随着14年的iPhone6和6P出来之后,iPhone的屏幕尺寸也越来越多,屏幕适配是一个需要解决的问题,以后不一定苹果又出什么尺寸的iPhon ...

  8. JDK 1.8 新特性之Date-Time API

    来源:请点击查看 1.8之前的日期类: 线程不安全:java.util.Date 这个类线程不安全,而且所有日期类都是可变的. 时间处理麻烦:默认的开始日期从1900年,不支持国际化,不提供时区支持, ...

  9. Java9 新特性

    Java9中的9个新特性 1. Java 平台级模块系统 2. Linking 3. JShell: 交互式 Java REPL 4. 改进的 Javadoc 5. 集合工厂方法 6. 改进的 Str ...

随机推荐

  1. 【原理】从零编写ILI9341驱动全过程(基于Arduino)

    最近在淘宝入手了一块ILI9341彩色屏幕,支持320x240分辨率.之前一直很好奇这类单片机驱动的彩色屏幕的原理,就打算自己写一个驱动,从电流层面操控ILI9341屏幕.话不多说,我们开始吧( ̄▽ ̄ ...

  2. tensorflow数据读取机制tf.train.slice_input_producer 和 tf.train.batch 函数

    tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算. 具体来说就是使用一个线程源源不断的将硬盘中的图片数据读入到一个内存队列中,另一个线程 ...

  3. Python中url标签使用详解

    url标签: 1.在模板中,我们经常要使用一些url,实现页面之间的跳转,比如某个a标签中需要定义href属性.当然如果通过硬编码的方式直接将这个url固定在里面也是可以的,但是这样的话,对于以后进行 ...

  4. Spring Boot2 系列教程 (十四) | 统一异常处理

    如题,今天介绍 SpringBoot 是如何统一处理全局异常的.SpringBoot 中的全局异常处理主要起作用的两个注解是 @ControllerAdvice 和 @ExceptionHandler ...

  5. Android Linker简介

    简单介绍Android linker的基础知识,基于Android 10分支. linker的作用 考虑简单的HelloWorld程序. $ tree . . |-- jni | |-- Androi ...

  6. 编写自己的 GitHub Action,体验自动化部署

    本文将介绍如何使用 GitHub Actions 部署前端静态页面,以及如何自己创建一个 Docker 容器 Action. 简介 Actions GitHub Actions 是 GitHub 官方 ...

  7. JVM中的GC算法,JVM参数,垃圾收集器分类

    一.在JVM中什么是垃圾?如何判断一个对象是否可被回收?哪些对象可以作为GC Roots的根 垃圾就是在内存中已经不再被使用到的空间就是垃圾. 1.引用计数法: 内部使用一个计数器,当有对象被引用+1 ...

  8. Java单体应用 - Markdown - 02.基础语法

    原文地址:http://www.work100.net/training/monolithic-markdown-basic.html 更多教程:光束云 - 免费课程 基础语法 序号 文内章节 视频 ...

  9. [bzoj2286] [洛谷P2495] [sdoi2015] 消耗战

    Description 在一场战争中,战场由 \(n\) 个岛屿和 \(n-1\) 个桥梁组成,保证每两个岛屿间有且仅有一条路径可达.现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足 ...

  10. 【java面试】java和C/C++的区别

    1.内存分配 java中对内存的分配是动态的,JVM自动对内存进行扫描,对长期不用的空间作为"垃圾"进行收集,使得系统资源得到更充分地利用.按照这种机制,程序员不必关注内存管理问题 ...