MongoDB 4.2:让开发、运维、安全再上新台阶 原创

MongoDB 4.2通过支持分布式事务、通配符索引、自动重试和修改分片键等让开发变得更快速;通过新的物化视图、Kafka连接器和对Kubernetes的支持以及客户端加密等,让应用变得更健壮;通过新的在线索引方式、更快的初始化速度等让运维工作变得更轻松。

至顶网软件与服务频道消息: MongoDB 4.2是MongoDB当下最新的版本,这是MongoDB公司在去年的全球用户大会正式推出的。按照软件行业通行的惯例,大版本号才意味着软件有重大升级,才是重大发布。不过,MongoDB 4.2被不少人认为是一次重大发布,因为此版本带来了许多非常重要的特性,比如分布式事务、客户端字段级别加密、按需物化视图以及通配符索引等,这些特性使得MongoDB能广泛地应用到各种业务场景,尤其是一些关键业务场景。

一直以来,关系型数据库是这个市场的绝对霸主,但是近些年随着互联网应用的普及和云计算的兴起,以MongoDB为代表的一批NoSQL数据库迅速崛起,数据库市场迎来了40多年最大的变化。来自于DB-Engine的市场数据显示,MongoDB已经持续多年与Oracle、MySQL、SQL Server、PostgreSQL一起位列全球五大最流行的数据库,其影响力已经超过传统数据库DB2。

诞生于2009年的MongoDB如今在全球得到非常广泛的应用,涵盖银行、保险、金融、制造、电信、游戏、互联网等各行各业。在MongoDB市场份额不断提升过程中,新的用户需求也不断涌现,特别是一些关键业务场景对MongoDB提出非常高的需求,MongoDB版本的不断升级正是对这些需求的响应,这些升级反过来又促进了MongoDB更广泛的应用,从而让MongoDB在数据市场地位不断巩固和提升。

对开发人员更友好

今天,MongoDB在全球范围得到了广泛应用,付费客户已经超过1.5万,社区服务器下载量超过7000万。这份成绩对于一个挑战者而言非常亮眼,但MongoDB显然并不满足于此,而是一直致力于拓展MongoDB的广泛应用。

实际上,MongoDB一直在努力完善各种能力以满足其在更广泛领域,尤其是关键业务领域中的应用,支持事务就是其中之一。众所周知,NoSQL数据库的关键特性是灵活性、可伸缩性,其代价却是缺乏一致性保证,因此,大部分NoSQL数据库并不具有事务能力,这也导致这些数据库无法在企业关键业务中应用。MongoDB用了6个版本来逐渐补齐这一能力。从3.0开始,MongoDB从最初的单文档事务、到多文档事务,最终在4.2版本中实现了对分布式事务的支持。而且在完善过程中,使用了同样的事务语法,比如MongoDB 4.2分布式事务与MongoDB 4.0的多文档事务完全相同,这意味着开发人员可以使用相同的关系式事务语法,在扩展分布式事务时,客户端代码不需要修改就能无缝迁移。

除了事务之外,通配符索引是MongoDB 4.2中新增的另一个亮点功能,利用MongoDB的这个能力,开发人员可以通过建立一个通配符索引来实现为所有特征字段建立索引,从而大大提高开发人员的开发效率。而在以往,这需要开发人员针对一个个字段分别建立索引,繁琐而且效率低。采用通配符索引不仅能加快应用的开发和发布速度,还能更好地支持各种创新性的应用。另外,有了通配符索引,查询也变得更简单。

支持片键值的修改也是MongoDB 4.2中新增的重要能力。作为在互联网时代诞生的新一代数据库产品,MongoDB的一大亮点就是其存储和访问海量数据的能力,这是依赖其分布式架构实现的,包括数据的分片、扩容/缩容时数据的自动均衡、分片信息的存取以及高可用,所有这些特性的集成使得数据库能从容应对海量数据的存储和访问需求。

数据的分片是由一个关键字段决定的,这就是片键,如果片键发生变化,传统的方式都是删除这条数据,然后再插入一条数据,确保新的数据能够被重新分布到正确的位置上。这种方式不仅麻烦,而且很难以保证原子性。MongoDB 4.2开始支持片键值的修改,也就是说开发者可以直接修改片键的值,修改后MongoDB会自动根据新的片键值将文档移动新的片上。对开发者而言,这既保证了原子性又大大简化了操作。比如,需要将数据移动到不同片上,或者需要将旧文档归档到低成本的存储上,直接修改片键的值就可以实现,从而大大提高了效率。

对开发者而言,MongoDB 4.2中的改进远不止这些,其故障处理能力也得到了进一步的简化。在分布式网络环境中开发应用,开发者必须在代码中处理网络故障。比如针对网络抖动,开发者必须编写代码来捕捉和处理这类故障。为了让开发更快捷,从MongoDB 3.6开始引入了自动写重试功能,当网络故障或发生MongoDB选举导致无法写入时,无需开发者来处理,MongoDB 的驱动会自动重试。现在MongoDB 4.2更上一层楼,引入了读重试功能,当遇到网络故障或主节点选举时,驱动会自动重试一次,而且MongoDB 4.2将写重试作为默认设置。

如果说读写重试的引入是简化了开发者的工作,那么Chart的正式发布则是直接帮助开发者完成了MongoDB报表开发工作。传统上要开发MongoDB的报表,要么需要自己写代码,要么使用第三方BI工具来实现,现在有了MongoDB Chart,开发者无需编写一行代码,只需简单的拖拽,就可以在Chart中直接完成MongoDB数据报表,甚至可以把生成的报表嵌入到应用里直接展现,从而使创建MongoDB报表的时间从原来几天到现在的几分钟。而且,Chart可以直接识别MongoDB集合中的数据模型,指定从某个节点或分析节点来读取数据,这样能避免影响在线业务的进行。

系统更稳定、更好用

视图是数据库的基本功能之一,利用视图可以方便程序设计、让编码更简单,同时也可以提高数据安全性(如通过视图让授权用户只看到允许看的数据)。视图是动态的数据的集合,是虚拟的,并不是物理存在,计算完成后视图中的结果也会释放,哪怕这次查询费了很长时间。为了保留计算结果,以便于后期高并发反复使用,从而达到改善数据库性能的目的,一些数据库推出了物化视图功能。

MongoDB从3.4版本开始支持视图,在MongoDB 4.2则更进一步,推出了按需物化视图功能,支持创建数据集视图,向客户端应用程序呈现大数据分析的结果,预计算(提前计算)或仅过滤数据集部分结果。MongoDB 4.2不需要每次重新运行全部命令,而是可以使用新的$merge运算符来更新视图集合,还可以控制新文档的更新方式,并可以在新视图上使用索引以加快访问速度。同时,物化视图对于非分片和分片的集合都可支持,并且可以按需控制视图的更新时间和更新方式。新的物化视图不仅更为灵活,也让应用访问视图时性能更佳。

MongoDB除了不断完善自身的功能外,还在不断优化与第三方的连接,为一些流行的技术提供更好的支持。比如,事件驱动已经成为了新一代实时业务处理的标准架构,而MongoDB和Kafka也是这类架构的标准组件,但两者之间集成却缺乏官方的支持。为了让Kafka数据流服务和MongoDB的集成更为方便,MongoDB 4.2中提供了官方的Kafka连接器,这个连接器由MongoDB原厂开发和支持,并已经经过Kafka的认证。与其他的Kafka 连接器不同,MongoDB官方版本同时支持MongoDB作为Kafka的生产者和消费者。通过连接器可以把Kafka中的消息写入到MongoDB的集合中;通过MongoDB Change Stream 变更流,可以将MongoDB集合中的变化直接发布到Kafka的主题中,整个过程非常方便和简单。

其实,MongoDB对市场主流技术跟进不止是有Kafka连接器。为了更好地支持微服务架构和Kubernetes容器环境,MongoDB 4.0就推出了Kubernetes的集成器测试版,在MongoDB 4.2中Kubernetes集成器已经正式推出。通过Kubernetes和MongoDB企业版管理工具Ops Manager的集成,企业利用Ops Manager的自动化管理能力可以通过Kubernetes部署MongoDB,还可以实现从监控、备份到扩容升级的全面管理,确保微服务、容器环境下的MongoDB健壮稳定、数据可靠。

数据更安全,管理更简单

安全是IT系统的一个永恒的话题,对于一个管理和存储数据的数据库产品,安全更是一个重点。而MongoDB也是一直持续地增强其安全功能,最新的举措就是在MongoDB 4.2中新增了客户端加密功能。利用这个功能,用户如果在自己的客户端实现密钥加密,数据库管理员打开数据库看到的就是密文。当今用户越来越多地采用公有云来部署自己开发的应用,如果采用了客户端加密,既使是提供数据库云服务的厂商也不知道你存的是什么,从而很好地解决了用户对保存在MongoDB云数据库中数据安全的担心。另外,在云环境下有很多合规性要求,需要确保云厂商一定把数据库彻底删除。现在这个事情很简单了,只要销毁密钥,就能保证这些数据不可读。而且,这个功能启用非常简单,只要在客户端创建一个密钥就可以了,启用这个功能对性能也几乎没有什么影响。

实际上,安全只是系统管理员管理MongoDB的诸多关注点之一,在安全之外它们还有更为常见的需求,如管理简单、运行可靠,MongoDB 4.2同样也为满足管理和运维人员的这些诉求带来了好消息。

管理索引是数据库管理非常重要的环节。一般来说,如果用在线的方式来建索引,可能速度会比较快,但是会导致锁库;如果在后台来建,不锁库但创建的速度会很慢。MongoDB 4.2中推出了新的在线建索引,既有前台建索引的速度,同时又保证不锁库、不锁表、不影响业务,这个功能会让数据库管理员的工作大大减轻。另外,MongoDB 4.2还有很多许多改进也能提高管理员的效率,比如说初始化速度提升了15%,这就意味着扩容和恢复的速度会更快;节点的状况切换速度提升10倍,从而让维护窗口变得更短。

另外,在高可用性方面MongoDB 4.2也做了不少工作。比如,传统数据库主要是通过心跳来看CPU和服务是否正常,MongoDB 4.2把监控覆盖到文件系统,如果CPU运行正常,但是文件系统I/O无法支持业务了,系统也会发生切换,这样能让可用性更高。

综上所述,MongoDB 4.2通过支持分布式事务、新的通配符索引、自动重试和修改分片键等让开发变得更快速、更轻松。同时,新的物化视图、Kafka连接器和对Kubernetes的支持以及客户端加密等,让应用变得更健壮。还有,MongoDB 4.2新的在线索引方式、更快的初始化速度以及更快的片键切换速度让维护窗口更短,从而让运维工作变得更轻松。正是通过上述这些方面的改进,使得MongoDB 4.2又一次完成了一个里程碑式的升级。

值得一提的是,随着MongoDB 4.2的推出,老版本的MongoDB将陆续退出市场。其中就包括MongoDB 3.4。MongoDB已经宣布,MongoDB 3.4版本在2020年1月31日停止支持,同时建议用户将MongoDB升级到最新稳定版本(当前为4.2版本)。

停止对老版本的支持是必要之举,这有利于MongoDB的开发团队持续推进开发工作,将花费在旧版本上的精力全部用于新特性开发和功能增强,从而提供功能更为强大的产品和服务。对于那些缺少专业人员的用户,如果升级有困难不妨选择云服务,包括MongoDB的Atlas云服务、在中国有阿里云提供的MongoDB云服务等。借助云服务商的专业人员,用户能彻底从数据库日常运维工作中解脱出来,从而全力关注自己的业务,更好地推动业务的创新和发展。

来源:至顶网软件与服务频道

0赞

好文章,需要你的鼓励

2020

02/21

16:16

分享

点赞

邮件订阅
白皮书