MongoDB 3.2变动一览
3.2测试版本总算release了!E叔带大家来一览MongoDB 3.2版本的真容。
(PS:内容比较多,在此仅针对个人认为比较重要的进行讲解,markdown写的,貌似WP的markdown插件有点奇怪,格式出来和写的时候不太一样,有点丑,大家见谅。)
以下是原文链接:
Development Release Notes for 3.2.0 Release Candidate
storage engine change
WiredTiger引擎将是默认引擎了.
dbpath中有数据,在配置中没有指定引擎的话,会自动判断是什么引擎,但是如果指定了引擎,在dbpath中如果有别的引擎的数据文件,将不能启动。
index change
- 3.2将不允许version 0的indexes了,如果有会在log中warning(解决方式:删除index,重建index)
aggregation compatibility changes
$avg 如果在不存在的字段上进行计算,会返回null(此前是0)
$substr 将报错,如果返回结果是无效的UTF-8(此前会返回该结果)
数组元素将不会被像之前那样通过aggregation pipeline一个一个拆成为literal了,而是会直接解析为expression。
如果希望还是用literal的方式,可以使用$literal
Replication Election Enhancements
复制集选举的加强。
3.2后复制集的failover 时间和选举流程&算法有了很好的优化。(记得算法变动大致是投票的请求和返回都带上了一个类似version的,这样就不像以前默认投票一次后需要等30s)
复制集默认使用protocolVersion: 1,而之前版本 protocolVersion: 0
新增复制集配置参数settings.electionTimeoutMillis(默认10000(ms)),意思就不用解释了,顾名思义。(只在protocolVersion: 1的时候适用)
新增复制集配置参数settings.heartbeatIntervalMillis(默认2000),顾名思义 心跳检测的timeout设置
Sharded Cluster Enhancements
shard集群的加强
3.2版本不建议用3个mongod实例作为config server了。
在3.2版本中,默认config servers 将以一组复制集的形式服务。(必须使用WT引擎),该变动增强了config servers的一致性,这样允许shard cluster可以拥有更多个数的config servers(比如up to 50:))
同时config server 的repl set有如下限制:
- 不能有投票节点
- 不能有delay节点
- 必须可以建立indexes(builindexes设置不能为false)
部署新的config server的方式我就不一一搬运了url如下:
readConcern
3.2 WT支持了readConcern,有Local(默认)和majority2个设定。
local就和以前一样没啥好说。
majority,将返回节点最新的且已经确认已经被写入其他majority节点的数据。
不细说了,url为:
Partial Indexes
mongodb3.2支持我们对于某个collection进行Partial index建立。
怎么理解呢,简单举个例子:
我们希望只对rating大于5的document建立 一个联合索引:
db.restaurants.createIndex(
{ cuisine: 1, name: 1 },
{ partialFilterExpression: { rating: { $gt: 5 } } }
)
partialFilterExpression这个参数可以对我们mongodb所有类型的索引适用。
那么Partial indexes也有一些限制。
Mongo将不会对在不完整的结果集上进行query或者sort的操作适用partial indexes。
举个例子
建立了这样的index
db.restaurants.createIndex(
{ cuisine: 1, name: 1 },
{ partialFilterExpression: { rating: { $gt: 5 } } }
)
- 这样的会使用partial index
db.restaurants.find( { rating: 6 } )
db.restaruants.find( { cuisine: "Italian", rating: { $gte: 8 } } )
- 而这样的不会:
db.restaurants.find( { rating: { $lt: 8 } } )
db.restaruants.find( { cuisine: "Italian" } )
很好理解吧。
其他的限制:
不能同时适用partialFilterExpression 和 sparse参数
不能建立多个仅仅是filter expression不同的partial index
复制集或者shard cluster 需要都是3.2才能适用。
_id不适用
shard key不能是partial indexes
partial indexes 与sparseindex的对比:
Document Validation
3.2开始,mongodb支持在insert 和update的时候validate documents了。(Validation rules are specified on a per-collection basis)
有这3个参数,
validator,
validationLevel:有off,strict,moderate级别(默认strict)()
validationAction:有error和warn(默认error)
可以通过db.createCollection()和collMod来设定。
ps:这类操作不支持指定expressions
$geoNear, $near, $nearSphere, $text, $where.
例子1
建立新的collection并设置validation
指定contact表的phone字段只能是string,或者email必须匹配如下规则,或者status必须为Unkown或者Incomplete
db.createCollection( "contacts", {
validator: { $or:
[
{ phone: { $type: "string" } },
{ email: { $regex: /@mongodb\.com$/ } },
{ status: { $in: [ "Unknown", "Incomplete" ] } }
]
}
} )
这时候做这样的插入:
db.contacts.insert( { name: "xyz", status: "A" } )
返回是:
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
例子2
为已有collection建立validation
db.runCommand( {
collMod: "contacts",
validator: { $or: [ { phone: { $exists: true } }, { email: { $exists: true } } ] }
} )
查看表的validation规则
db.getCollectionInfos( { name: "contacts" } )
validation的限制:
不能对admin,local和config database的表做validation
不能对system.*表做validation
Bypass Validation
设置bypassDocumentValidation参数可以让下列命令bypass validation per operation
applyOps command
clone command and db.cloneDatabase() method
cloneCollection command and db.cloneCollection()
copydb command and db.copyDatabase() method
findAndModify command and db.collection.findAndModify() method
mapReduce command and db.collection.mapReduce() method
insert command
update command
$out for the aggregate command and db.collection.aggregate() method
Left Outer Join(目前只有企业版)
- MongoDB3.2的企业版本将提供 left outer join 功能的$lookup
用法如下:
{
$lookup:
{
from: <collection to join>,
localField: <fieldA>,
foreignField: <fieldB>,
as: <output array field>
}
}
具体请参考:
$lookup
aggregation framework的提升
New stages, accumulators, and expressions.
一些原来只在$group中的expressions现在也可以在$project中使用。如:
$avg
$min
$max
$sum
$stdDevPop
$stdDevSamp
shard cluster上的性能提升。
如果pipeline第一步是在shard key上 开始$match,那么整个pipeline只在mathing的shard上进行,此前是split 然后merge(在primary shard)
如果aggregation操作在多个shard 分片上进行(且不需要在primaryshard上进行,$out和$lookup需要在primary上进行),那么最后的结果可以route到其他shard分片上进行merge,而不再是只能在primaryshard上,造成primary shard 的overload了。
有关aggregation更多细节请参考:
MongoDB tools的提升
mongodump和mongorestore支持 archive file 和stdout/in
通过–archive 参数,mongodump和mongorestore支持archive file 和stdout/in streams。
例子:
mongodump --archive=test.20150715.archive --db test
mongodump --archive --db test --port 27017 | mongorestore --archive --port 27018
mongorestore --archive=test.20150715.archive --db test
mongodump 和mongorestore支持compressed data
通过–gzip参数,mongodump 和mongorestore支持 comressed data dumps。大大节省了空间。
例子:
mongodump --gzip --db test
mongodump --archive=test.20150715.gz --gzip --db test
mongorestore --gzip --db test
mongorestore --gzip --archive=test.20150715.gz --db test
Encrypted Storage Engine(只有企业版支持,不赘述了)
General Enhancements
Diagnostic Data Capture
为了方便mongodb 工程师对mongodb server 的分析,3.2开始会定时收集 server statistics到diagnostic中。
默认是1s的间隔,可以通过diagnosticDataCollectionPeriodMillis.修改
会在dbpath下简历 diagnostic.data 文件夹
配置diagnostic文件的大小可以使用diagnosticDataCollectionFileSizeMB,
配饰diagnostic文件夹的大小可以使用diagnosticDataCollectionDirectorySizeMB.
Geospatial Optimization
地理位置我个人用到比较少,有需要的朋友可以去下列连接看看:
Bit Test Query Operators
MongoDB 3.2 provides new query operators to test bit values:
$bitsAllSet
$bitsAllClear
$bitsAnySet
$bitsAnyClear
SpiderMonkey JavaScript Engine
详情参考:
- mongo Shell and CRUD API
详情参考:
WiredTiger and fsyncLock
3.2开始WT支持fsync来做一致性锁了,就像以前mmap的fsync。
Text Search Enhancements
全文index的提升,不在这细说了,具体url:
Changes Affecting Compatibility
3.2版本的一些变动可能会影响到兼容性,或者需要我们进行一些设置。具体可以参考:
Additional Information
下列是3.2版本的其他的一些参考
关于作者
周李洋,
社区常用ID eshujiushiwo,
Teambition运维总监
关注Mysql与MongoDB技术,数据架构,服务器架构,高效运维等。
mongo-mopre,mongo-mload作者,任CSDN mongodb版主,MongoDB上海用户组发起人,
MongoDB官方翻译组核心成员,MongoDB中文站博主,MongoDB Contribution Award获得者,
MongoDB Days Beijing 2014演讲嘉宾。
联系方式:378013446
MongoDB上海用户组:313290880
欢迎交流。
转载请注明链接:http://www.mongoing.com/eshu_3.2
MongoDB 3.2变动一览的更多相关文章
- DTCC 干货分享:Real Time DaaS - 面向TP+AP业务的数据平台架构
2021年10月20日,Tapdata 创始人唐建法(TJ)受邀出席 DTCC 2021(中国数据库技术大会),并在企业数据中台设计与实践专场上,发表主旨演讲"Real Time Daa ...
- (动态模型类,我的独创)Django的原生ORM框架如何支持MongoDB,同时应对客户使用时随时变动字段
1.背景知识 需要开发一个系统,处理大量EXCEL表格信息,各种类别.表格标题多变,因此使用不需要预先设计数据表结构的MongoDB,即NoSQL.一是字段不固定,二是同名字段可以存储不同的字段类型. ...
- MongoDB 知识要点一览
1.启动mongoDb数据库: 进入mongoDB的安装目录,执行如下命令 C:\Program Files\MongoDB\Server\3.0\bin>mongod.exe --dbpath ...
- MongoDB 3.0新增特性一览
转自:http://blog.sina.com.cn/s/blog_48c95a190102vedr.html 引言 在历经版本号修改(2.8版本直接跳到3.0版本)和11个rc版本之后,MongoD ...
- MongoDB 3.4 功能改进一览
MongoDB 3.4 已经发布,本文主要介绍 3.4 版本在功能特性上做的改进,内容翻译自 [https://docs.mongodb.com/manual/release-notes/3.4/?_ ...
- [转帖]分布式Unique ID的生成方法一览
分布式Unique ID的生成方法一览 http://www.importnew.com/22211.html 分布式的Unique ID的用途如此广泛,从业务对象Id到日志的TraceId,本文总结 ...
- MongoDB Windows环境安装及配置
MongoDB一般安装 1.首先到官网(http://www.mongodb.org/downloads )下载合适的安装包,目前的最新版本为2.6 安装包有zip和msi格式的,这里推荐下载zip格 ...
- MongoDB副本集学习(三):性能和优化相关
Read Preferences/读写分离 有时候为了考虑应用程序的性能或响应性,为了提高读取操作的吞吐率,一个常见的措施就是进行读写分离,MongoDB副本集对读写分离的支持是通过Read Pref ...
- MongoDB 副本集的原理、搭建、应用
概念: 在了解了这篇文章之后,可以进行该篇文章的说明和测试.MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组 ...
随机推荐
- 剑指offer59:按之字形顺序打印二叉树:[[1], [3,2], [4,5,6,7]]
1 题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 2 思路和方法 先给定一个二叉树的样式: ...
- 20191031:Python底层机制
20191031:Python底层机制 python底层从3个方面来说,分别是: 引用计数机制 垃圾回收机制 内存池机制 引用计数机制 使用引用计数来追踪内存中的对象,所有对象都有引用计数,并且这个引 ...
- 【exgcd】卡片
卡片 题目描述 你有一叠标号为1到n的卡片.你有一种操作,可以重排列这些卡片,操作如下:1.将卡片分为前半部分和后半部分.2.依次从后半部分,前半部分中各取一张卡片,放到新的序列中.例如,对卡片序列( ...
- Mybatis配置、逆向工程自动生成代码(CRUD案例)
目的: mybatis简介 搭建mybatis环境 基于SSM逆向工程的使用 Mybatis增删改查案例 mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及 ...
- Spring AOP日志实现(一)
前置通知:获取访问的类,访问的方法,带参数和不带参数的 日志表信息描述字段: 获取访问时长:
- DG环境恢复同步遇到报错ORA-00353ORA-00334以及ORA-00600[2619], [47745]
问题说明 客户环境主库4节点RAC11.2.0.4,单实例DG环境,DG由于空间不足,导致同步中断,由于DG备库未应用的归档主库都再,本次恢复的方式,是开启dg mrp进程,自动同步追上主库. 以下遇 ...
- threejs CameraHelper 查看照相机的观察范围
简单例子 这个例子,是在一个视图中,看到照相机的辅助线,也就是,一个照相机的观察访问 这样,就需要两个照相机,一个是主照相机,一个是加有辅助线的照相机(有两种,正交和透视,这里辅助的使用的是正交的) ...
- SAP Leonardo图片处理相关的机器学习服务在SAP智能服务场景中的应用
本文作为Jerry最近正在做的一个项目的工作思路的梳理. 我们假设这样一个服务场景,技师上门维修某设备,发现设备上某零件损坏了,假设这位技师由于种种原因,没能根据自己的经验识别出这个零件的型号.此时技 ...
- nginx的proxy模块详解以及参数
文章来源 运维公会:nginx的proxy模块详解以及参数 使用nginx配置代理的时候,肯定是要用到http_proxy模块.这个模块也是在安装nginx的时候默认安装.它的作用就是将请求转发到相应 ...
- django_rest framework 接口开发(一)
1 restful 规范(建议) 基于FbV def order(request): if request.method=="GET": return HttpResponse(' ...