• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

MongoDB 3.2新功能阐述

MongoDB 彭东稳 8年前 (2016-03-17) 22941次浏览 已收录 0个评论

MongoDB 3.2新功能

128日,MongoDB 3.2版本正式发布——这是从3.0版本我们产品进入一个成熟的新时代以来的第一个版本。该版本通过满足更多任务关键用户案例及公司内部更多角色的需求,继续推动MongoDB在成为公司和机构默认数据库的道路上不断前进。MongoDB3.2号称是有史以来最大的新版本,下图是MongoDB2.23.2之间的改变。

MongoDB 3.2新功能阐述

下面就对MongoDB3.2新功能一一阐述

1)  内存数据库(BETA

MongoDB 3.2新功能阐述

内存数据库是通过一个新的存储引擎的方式来展现,但是在Mongodb3.2中还是BETA版,Mongodb到现在为止一共有三个存储引擎,分别是WiredTigerMMAPv1In-Memeory这三个存储引擎,默认使用的是WT存储引擎。你如果在某些场景下需要特别快的性能,那么可以把Mongodb某个节点设置为内存数据库。MongoDB默认不属于内存数据库但是会占用特别多的内存用来缓存数据(Memcache属于内存数据库),内存数据库最大的好处就是忽略了数据持久化这一重大影响性能的操作,忽略了很多额外开销。

2)  数据加密(企业版支持)

l  基于WiredTiger存储引擎

l  默认使用AES-256加密,支持FIPS 140-2方式

l  密钥管理可以选择本地方式或中央服务器方式

l  使用数据加密应用无须修改

l  数据在落盘时自动加密,读取时自动解密

l  10%-20%左右的性能损耗

3)  文档校验

Mongodb对数据的存储一向都是自由灵活的模式,但是在3.2加入了文档校验的功能,就是检查文档的合法性,对文档结构、字段类型、字段值可以设定检查约束。集合可以拥有一个校验器来作为集合元数据的一部分。校验器是一个匹配表达式,会在文档插入或修改时验证匹配结果为 true。如果校验不通过,修改将会被拒绝并返回一个错误 121,但Mongodb依然支持灵活的模式。

但是也有些限制。首先,校验器必须是非常简单的匹配表达式;大于、 小于或是否存在等。不可以用地理位置的附近,不可以用文本查找也不能用where表达式。

你可以在创建表(译者注:我想应该是集合)的时候设置校验器,只需要加一个 validator 的设置项,或者也可通过 collmod 命令,如下:

关于校验器,还有些需要记住的。首先,他们只在添加跟修改操作时生效,言下之意是对于集合中的现存数据,校验器是不校验的直到你更新一个已经存在的文档,校验器就会起作用了,除非文档没做更改。因此如果你想启动校验,你可能需要先把现有集合扫描一遍,确认所有文档符合或者对所有添加/修改操作添加失败快照。你可以把 BypassDocumentValidation 权限给你的用户,让他们设置bypassDocumentationValidation 标志,但是这可能与校验的初衷有所冲突。顺带一提,这些权限跟标识主要是为一些运维操作设计的,比如恢复一个 partially conforming collection

4)  BI Connector

BI Connector工具主要的工能就是连接BI工具(BIBusiness intelligence,商业智能),BI工具主要是用来做查询报表、数据分析、数据挖掘的,如tableauQlikViewPentahoOracle BIEE等等。MongoDB支持绝大多数的BI工具。通过一个ODBC驱动来向外提供BI连接Mongodb进行数据查询分析。ODBC是微软提供了一种对关系型数据库通用的SQL接口。也就是说可以使用SQL语言来访问MongoDB数据库了。但是MongoDB把这个功能取名为BI Connector而不是SQL接口,因为有很多SQL语句暂时还无法提供,比如一些比较复杂的JOIN、子查询和SQL标准的function

5$lookup

有个不争的事实是 MongoDB 不具备任何形式的表连接。其实大部分情况,你不需要表连接,但是当你需要将数据组合并分析,这个时候你可能想要个连接功能。MongoDB 公司关于这点的意见是,稍稍将你的数据非正规化一下,将不同集合的数据复制到那个你准备分析的集合中,并保持同步,起码每天同步一次,但是谈到分析,你总不能啥数据都到处复制。

MongoDB 的核心分析工具是 aggregation,通过这个,你能创建一个任务管道(pipeline),对选中的文档施加各种操作,最后得到需要的数据。当你要聚合订单表时,首先在 pipeline 中添加个运算符,来匹配特定的几类产品的订单,然后用另一个运算符分组计算每类产品的销量。问题是pipeline只能对一个集合中的文档进行操作,因此,如果还需要操作另一个集合的时候,就玩不转了。MongoDB 3.2添加了一个$lookup 操作符用以引入其它集合的数据。

Mongodb提供了这个$lookup其实就是SQL中的JOIN功能,Mongodb 3.2之前只能在一个集合中进行数据查询,但从3.2开始可以支持多个集合进行查询。但是为什么又改名字不叫JOIN呢?还是因为此$lookup无法提供JOIN那么强大的功能,比如只能支持非常简单的LEFTRIGHT JOIN,并且JOIN的操作符必须是“=”号,不可以是大于小于;另外被JOIN的表还不能是分片的表。所以叫$lookup,表示看一看。

MongoDB 3.2新功能阐述

MongoDB 3.2新功能阐述

6)  局部索引

与模式相关的另一个服务器端的功能就是”局部索引“,对这一功能最好的解释就是通过实例来说明。假设你手头有你曾经接触过的所有客户,包括活跃的和非活跃的。在日常的使用中,你想在查询活跃客户时获得很好的性能。要达到很好性能的一种方式是分为两个数据集(即表)来处理,一个数据集是活跃客户,它具有索引,另一数据集是非活跃客户,没有索引,不过,这就要求对应用进行更改,确保客户存储在它应该存储的那一数据集里。另外,你可以使用局部索引,局部索引只对哪些满足过滤器表达式的文档进行索引。如下:

此时,对非常大型的表的处理性能会得到巨大的提升。这种情况下,如果文档与过滤器不匹配,那么,不但在查询时跳过了这些文档,而且在插入或者更新时也不会对这些文档添加索引。不过性能提升的程度则完全取决于需要进行索引处理字段的结构和密度。

7)  新的复制集选举协议

MongoDB3.2使用版本1的复制协议减少复制集切换时间和加速同时初选的检测。新的复制集默认情况下使用版本1。以前MongoDB使用0版本协议并不能运行一个复制集指定配置protocolVersion:1

8)  MongoDB COMPASS

MongoDB COMPASS是第一个官网图形化界面,支持数据分析。

9)  OpsManager

OpsManagerMongoDB提供的慢查询图形化查看工具,在MongoDB 3.2中做了不少改进。更加人性化和视图化。

MongoDB 3.2新功能阐述


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (2)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!