mongoDB的读书笔记(via3.x)(00)_【概览】(01)_mongoDB3.0的一些变化

先啰嗦啰嗦,真的没想到,mongoDB能这么快推出3.x,我的2.6的读书笔记还没有写完呢,3.0就杀到了,咋办。。。头疼中。。。

看了一下3.0的介绍,我觉得还是直接上3.x的读书笔记吧,2.x的东东和3.x的比较着来,这样老的延续的东西也能温习,新的东西也可以马上知道,而且3.x的x到底到几的时候才能变成相对bug fixed版本还不知道,所以一边看着一边看bug fix过程吧。3.0的变化是从底层的数据存储上面发生的变更,存储方式的api可以使得今后增加更多的底层解决方案,根据不同的需求来定制不同的解决方案。mongoDB3.x是激动人心的一次变革,也更让我很期待去深入学习并且运用于今后的工作当中。

mongoDB 3.0于 2015年3月3日发布 我 当时在北京。希望在mongoDB 4.0发布的时候我可以说,我在嗯。。。哪里呢?一个让梦想能够实现得更加美丽的地方。呵呵。

文章中部分是直接翻译document,部分是我的一些结合以前的功能的描述。

mongoDB 3.0的主要变化(主要变化的摘录)

可插拔的数据存储引擎

mongoDB从3.0开始(其实2.8已经开始beta)终于提供了底层的API,使得存储这个底层过程可以和mongoDB的运用层分隔开来,第三方的存储解决方案今后将会层出不穷。

Wired Tiger

Wired Tiger,说实话,我。。我漏寡闻。。之前只知道它是BerkeleyDB的架构师的一个作品,但不知道这家已经貌似被mongoDB收购了,等于现在mongoDB既有自己的memory映射的存储方式又有一个很NB的Wired Tiger了,看来前景不错。

OK,啥是Wired Tiger呢?网址:http://www.wiredtiger.com/

网页上面的一句话是:making big data roar 。roar 这个词。。。我真的是词典了一下,没见过。这个词的中文意思是“咆哮”,Wired Tiger主页的各种数据已经体现了它的算法优势和能力,具体优秀的地方我在后面的学习和理解中继续挖掘然后share出来。mongoDB于2014年12月16日宣布收购Wired Tiger,这是个很成功的战略收购,链接戳戳我

mongoDB 3.0支持两种底层存储模式:

?MMAPv1

这个是mongoDB的亲儿子,自己一直在做的内存映射存储模式,这个模式我在以前的文章中大概写过,是private view 和 Journal 以及 shared view 共同作用来实现数据写入的,其实也就是很努力地使用了内存缓存还有日志。那,这个亲生的之前一直被猜测会被养子所代替,而3.0中把这个存储还是作为了默认模式。看来mongoDB还是想继续优化和持有一段时间(关于优化下面会继续说)。

?WiredTiger

作为3.0版本的明星闪亮登场,不过现在只支持64位的操作系统。

特性

WiredTiger可以支持mongoDB所有的特性,包括对于server,数据库的各种操作以及数据分析,我认为对于客户而言除了直接的使用结果,这个变化比较透明。如果现有数据要切换到WiredTiger需要使用mongoDB的命令进行切换,并且有一个比较复杂的update过程,这个我还没有研究,后面有时间细化。

另外一个比较帅气的就是,我们知道的Replica以及Shard是可以支持MMAPv1与WiredTiger的混搭模式,也就是可以根据我们的需求很存储目的来调整集群的模式,加上mongoDB的一些参数命令使得“物尽其用”可以发挥得更好,后面也希望有机会我自己能实践实践。

最后,虽然我还没有仔细研究这个WiredTiger,我觉得可以看到他的主页的图片总结一下它的特点。

1. 良好的线性可扩展性,随着操作线程的增加,(查询)操作的数量是线性递增的。

2. 良好的数据写入吞吐率,随着写入行数的增加,每秒的inserts几乎不变化(我靠,怎么做到的。。。)

3. update操作的低迟延性,随着request的增加,迟延变化率很低(我靠,这又是怎么做到的。。。)

如果高效的存储构件再加上mongoDB的易操作性出来的产品一定很帅。怪不得WiredTiger的口号是make big data roar。

另用户泪奔的又一个特性

document级别的锁。之前的mongoDB的一大诟病就是collection级别的锁,这次WiredTiger直接扑灭这团火,document级锁直接解决大问题。并且采用snappy的压缩方式(sorry 这个我也是不太清楚,有空学学)。

MMAPv1的改善

并发的改善

养子那么强悍,亲儿子也不示弱,mongoDB表示对原来的collection级别的locking进行了改善。

(-?-;) 。。。 改善而已,效果还未知,但是从collection级别这几个字看来可能还是让大规模的读写操作产生畏惧心理。

空间分配机制的变化

以前的mongoDB还有一个诟病,就是空间分配机制。

有一个名词,叫做填充因子(padding Factor)。听着貌似挺神奇的一个东东,其实没啥,说白了就是给一条document占地用的参数,因为Nosql的mongoDB特点就是同一个collection的document可能内部的形态和构造会有不同(如果是in-place-update的话,这种情况会很少,因为in-place-update一般不会影响document的长度变化),大规模更新和删除操作的时候如果造成document长度的变化会出现文档移动的现象,这种移动有时候会对操作产生很大的影响,再加上collection级的锁,所以一旦数据量大并发又多,产生更多的移动那么影响也是很大的,在mongoDB权威指南第二版中明确写到”现在的mongoDB还没有太好的解决方案“。

3.0中,首先是改善collection的锁,第二个就是废除了填充因子。不使用填充因子,默认只使用mongoDB之前还不太成熟的power of 2 allocation的分配方式,并且宣称对这种方式进行了很好的优化,对于大数量级数据的处理可以“handle”。这种方式其实也是一种算法级的方式,简单来说就是把空间分配做成2的倍数,在开辟、移动的时候可以减少碎片并且在位置计算的时候算法也会统一、简单。在2.x之前的mongoDB中对于collection中的usePowerOf2Sizes 参数已经废弃,之前版本:

mongod –setParameter newCollectionsUsePowerOf2Sizes=false / true

有这么一个parameter的设定,这个设定对于collection可以运用”power of 2 allocation”的分配策略,而3.0开始已经不去识别这个设置,默认的mongoDB都是“power of 2 allocation”策略。

但是呢,如果我们的操作不是一个经常update和delete的操作,可能只有普通的插入或者是in-place-update的操作,那么其实不需要设置成”power of 2 allocation”的模式。所以mongoDB 3.0中提供关闭此策略的方式。当然,3.0也强调,你要确定你的操作是一个不会使得documents长度变化的操作,三思而后行哦。

Replica Sets

12 → 50

虽然谈不上是数量级上的变化,但是这个变化足以吓死一头牛。

之前谈过,Replica Set的最大节点支持数是12个,而3.0后是50个。。。

当然,投票节点之类的是否还是7个暂时不知道,后面看文档后再做说明。

支持Replica Sets的Drivers更多

各种Drivers的发布和正在开发中。

replSetStepDown 的改进

个人认为这个改进很有用。

replSetStepDown 的加快

加快,指的是可以对一些阻止replSetStepDown的操作进行直接杀掉。比如索引做成,写入操作或者一个长的mapreduce操作。

replSetStepDown 的减慢

之前,我曾经写过mongoDB的很麻烦的Rollback,自己还画了一副图来解释,本来觉得这个东东只能这样了,没想到而3.0的mongoDB终于改进了。

在老版本中,如果执行了replSetStepDown后,Primary会默认等待可成为候选者的Secondary 10秒的时间,这个设定毕竟是一个不太负责的设定,所以导致了Rollback,而mongoDB的Rollback的复原工作又只能人为操作,所以算一个小小的鸡肋。所以,3.0开始Primary会等待Secondary追到和自己一样的状态后再自杀。

replSetStepDown 的中和

上面既加速,又减速,其实都是一个极端操作,那么最后一招:中庸。

也算是一个模糊责任的办法。毕竟如果减慢Primary的自杀如果导致了长时间的假死也可能会被口水,所以,最新的replSetStepDown命令中可以设置等待Secondary追Primary的时间,算是一个timeout参数吧。另外,如果不考虑Secondary的同步,直接杀掉Primary的话,还可以使用force:true参数来直接枪毙,多种组合任君选用。

Sharded Cluster

Sharding也有所变化,但是我还没有详细的看完,后面细化的时候再写。

其他改进

安全性,Query的增强,log的的分类细化。。。比较多。慢慢来,来日方长。

就酱先。

つづく???

时间: 2024-10-10 09:37:18

mongoDB的读书笔记(via3.x)(00)_【概览】(01)_mongoDB3.0的一些变化的相关文章

mongoDB的读书笔记(via3.0)(00)_【概览】(02)_mongoDB3.0中的mongod启动方式小试牛刀

mongod启动 本来想写Replica的非测试模式的集群架构的,但是实在是手痒痒,把mongoDB的3.0给download下来了,看了一两眼文档后决定还是先大概写一点点关于启动的话题,之后写Replica的时候基本上就用mongoDB 3.0的方式+YAML的 配置方式来做了. mongod利用mmapv1启动 这个是default的启动方式.mongod的启动参数多如牛毛,本来想有空总结一下的,我勒个去的,有些估计这辈子也用不到的场景也不知道如何写,等我再考虑一下再说吧. 准备配置文件 s

mongoDB的读书笔记(via3.0)(05)_【Sharding】(03)_关于Shard Keys与Hash的理论知识小絮叨

紧急出个差,但是又不能不继续写,少写点,先把Shard key和Hash的一些小概念继续写一写. Shard Keys mongoDB的Sharding最重要的就是Shard Key.用Shard Key进行分片,并且按照指定的Chunk的大小进行Chunk的分割和移动(后面细说).Shard Key的一些特点: Shard Key不可以是multikey index 何为mutikey index?途中的addr[]这个数组就是所谓的mutikey index.Shard key可以是复数个字

mongoDB的读书笔记(04)_【Replica】(05)_初探Replica set副本集的搭建 By Test模式

Replica set Deployment On Test Mode 为啥是测试模式 实战 先絮叨絮叨操作系统 在一台机器上创建模拟5个节点 进入非db连接模式 建立5个节点的test script 启动所有的节点 配置节点 进入一个节点 配置Replica的config 进行初始化 check心跳和log 查看Replia的详细 查看Secondary Replia的详细 写数据实验 Primary写入 Secondary查看 Replica set Deployment On Test M

mongoDB的读书笔记(05)_【Sharding】(02)_分片的一些概念和小细节

分片的一些概念与细节 Primary Shard 在Replica set中有Primary和Secondary的概念,那么在Sharding中其实也有一个Primary的概念. 任何一个mongoDB中都有一个未分区的整体DB的collection在某一个Shard中.如下图. Collection1在ShardA中有一部分Chunks在ShardB中也有一部分Shards,而在ShardA 中却有一个Collection2保存整体的ShardA+ShardB的Collection1的和. C

mongodb设计模式策略之读书笔记

mongodb的设计模式策略 读书笔记 1.查询命令分类模式 在副本集中职责被分离到不同的节点.最基本的第一类节点可能也同时占据着首要地位,它只需要储存那些写入和更新所需的数据.而查询工作则交由第二类节点来执行.这一模式将提升首要节点服务器的写吞吐量,因为当写入一组对象时,需要更新及插入的数据量也随之减少,除此之外,二类节点也得益于较少的待更新数据和其自身所具有的为其工作量而优化的内存工作集. 也就是读写分离,主节点写,备节点做查询. 2.应用程序式事务模式 使用queue 样例 db.queu

Mongodb聚合操作之读书笔记

Mongodb聚合操作 读书笔记 mongodb,两种计算聚合pipeline和mapreduce pipeline查询速度快于mapreduce,但MapReduce能够在多台Server上并行执行复杂的聚合逻辑. mongodb不允许Pipeline的单个聚合操作占用过多的系统内存,如果一个聚合操作消耗20%以上的内存,那么mongodb直接停止操作,并向客户端输出错误消息. Pipeline方式使用db.collection.aggregate()函数进行聚合运算,运算速度较快,操作简单.

读书笔记:移动的帝国_日本移动互联网兴衰启示录

新年的时候立了一个旗帜,2017年读30本书,其中包括5本外文原版书.现在4月份了,终于完成一本..主席说,读完一本书,写一写读书笔记会印象更深刻.嗯,实践是对某种认知的最好认识.那就立刻行动起来:) 这本书断断续续阅读,根据微信读书记录,前后共花了5个小时..这5个小时就是实大实在屏幕前阅读的时间,微信阅读的使用感受之一,认识到原来读一本书的时间投入是这么少.碎片化时间果然"害人啊",原来一个下午就可以看完一本书,为什么我们读书还是那么少呢. 那其实这本讲日本移动互联网的书在豆瓣评分

mongoDB 读书笔记(初级命令)

关于mongoDB的相关知识,读书笔记,便于自己查阅用,不定期更新(纯手打)        <mongoDB权威指南> 一.创建更新和删除 1.创建 //批量插入一个集合可以节省时间,只用一次Tcp //插入时转成bson,并且数据不能大于4mb db.blog.insert({"name":"RedWolf"}) //插入一个文档 文档有一个name键 var temp={"name":"Dog"} db.blo

高质量C++/C编程指南_读书笔记1

----------------------------------------------------------------------------- 引用和指针 ----------------------------------------------------------------------------- 以下程序中,n是m的一个引用(reference),m是被引用物(referent). int m; int &n = m; n相当于m的别名(绰号),对n的任何操作就是对m的