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. 生产环境中使用docker注意点

    是否对容器使用的资源进行合理限制,比如内存 CPU 网络带宽等. 是否设置合理的网络访问限制,如 非root用户 iptables. 是否有在docker无法使用时的备选方案,如提供非docker环境 ...

  2. JS中使用FormData上传图片

    <!DOCTYPE html> <html> <head> <meta name="viewport" content="wid ...

  3. 【一头扎进Spring】 01 | 从 HelloWorld 开始看Spring

    Spring 是一个开源框架. Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能. Spring 是一个 IOC(DI ...

  4. ReactNative: 自定义ReactNative API组件

    一.简介 在前面介绍了很多ReactNative中UI组件和API组件,这些都是Facebook团队封装好的基础组件,开发者可以直接使用.然而,在实际的开发过程中,面对复杂的需求,此时原生的Nativ ...

  5. P2756 飞行员配对方案问题 二分图匹配 匈牙利算法

    题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员.由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员,其中1 名是英国飞行员,另1名是外 ...

  6. 洛谷 P2746 [USACO5.3]校园网Network of Schools schlnet Tarjan强连通分量

    schlnet ★★★   输入文件:schlnet.in   输出文件:schlnet.out   简单对比时间限制:1 s   内存限制:128 MB 描述 一些学校连入一个电脑网络.那些学校已订 ...

  7. nor flash之擦除和写入

    最近研究了下nor flash的掉电问题,对nor的掉电有了更多的认识.总结分享如下 擦除从0变1,写入从1变0 nor flash的物理特性是,写入之前需要先进行擦除.擦除后数据为全0xFF,此时写 ...

  8. Linux环境下Mysql开启远程访问权限

    如何通过Window的数据库可视化工具远程连接装在Linux上的Mysql呢?可以按照以下步骤逐一确认! 检查监听端口是否存在 netstat -ntlp |grep mysql 检查Mysql配置配 ...

  9. git branch stash

    一.branch(分支) 1.创建分支 git branch dev 2.切换分支 git branch dev 3.合并分支 git merge bug 4.查看分支 git branch 5.删除 ...

  10. restframework 分页组件、响应器

    一.分页组件 1.PageNumberPagination a.全局配置 导入模块 from rest_framework.pagination import PageNumberPagination ...