mongodb官网文档阅读笔记:与写性能相关的几个因素
Indexes
和全部db一样,索引肯定都会引起写性能的下降,mongodb也没啥特别的,相对索引对读性能的提示,这些消耗通常是能够接受的,所以该加入的索引还是要加入。当然须要慎重一些。扯点远的,以前我碰到过一个case。由于一个表的索引数量太多,导致兴许磁盘的util越来越高,达到70%。而刚加入的副本集成员磁盘uitl才20%不到。
后来发现是由于索引太多。越到后面造成的索引碎片也就越来越多。后来的处理方法是定期都挨个重做副本集的成员。
Document Growth and the MMAPv1 Storage Engine
一些更新操作会添加一个文档的大小。比方给一个文档再加入一列。对于MMAPv1的存储引擎,假设一个更新操作引起这个文档大小超过了之前申请的record size,mongodb将会在硬盘上又一次迁移使得保证有足够的空间存储这整个文档(这点类似于oracle的行迁移)。这个迁移操作将比不迁移的情况消耗更长的时间和代价,尤其是这个文档上有索引的话,由于假设这个文档有索引的话,mongodb必须更新它的全部的索引。因此假设一个文档有非常多索引的话,这个迁移将会影响到写入的吞吐量。
在mongodb3.0中,默认的情况下mongodb用2的指数形式来自己主动添加文档空间。2的指数大小能保证mongodb高效地反复利用剩下空间。同一时候也能在非常多情况下降低迁移的次数。
当然这样的2的指数形式尽管能降低又一次申请空间的次数。但却还是无法全然根除该操作。
Journaling
mongodb使用预先写journal log到磁盘的方式保证写操作的持久性。从而可以中崩溃中恢复(类似于关系数据库的redo log)。
在将数据写到数据页之前,它会先将其写入到journal log。
虽然journal log提供的持久性特性通常比它所须要的写性能消耗更重要。我们还是须要在持久化和写性能之间做一个权衡。
1 假设journal log和数据文件在同一块磁盘,数据页和journal将不可避免地存在写竞争。建议将journal log移到另外一块单独的磁盘也许能够提升写性能
2 假设上文提到的write concern设置了journal级别,mongod一般来说都会减少两次journal log之间的提交间隔(由于提交间隔太长。write concern设置后一次写操作将会花非常长时间),这样就会添加写负载。关于write concern,请參考我的另外一篇blog,http://blog.csdn.net/cug_jiang126com/article/details/47399133
3 可通过调整commitIntervalMs 參数动态改动journal
log的提交间隔,降低该值会添加写操作的次数,添加该值可降低写操作的次数,可是会添加数据丢失的风险。由于在这个提交间隔内。假设db崩溃了。那么这段时间内的数据是无法恢复的。
mongodb官网文档阅读笔记:与写性能相关的几个因素的更多相关文章
- mongodb官网文档阅读笔记:write concern
write concern保证了mongodb写操作的级别,不同的write concern设置相应了不同级别的写操作.设置的级别越高.那么写操作的性能的持久化做得越好,可是写性能也就越差. mong ...
- Spark Streaming + Flume整合官网文档阅读及运行示例
1,基于Flume的Push模式(Flume-style Push-based Approach) Flume被用于在Flume agents之间推送数据.在这种方式下,Spark Stre ...
- Spring3.0官网文档学习笔记(八)--3.4.3~3.4.6
3.4.3 使用depends-on 使用depends-on能够强制使一个或多个beans先初始化,之后再对这个bean进行初始化. 多个bean之间用","." ...
- Spring3.0官网文档学习笔记(一)
Part 1 Spring框架概述 Spring是模块化的,在应用中仅仅须要引入你所须要用到的模块的jar包,其余的jar包不用引入. spring框架支持声明式的事务管理,通过RMI或web ser ...
- Spring3.0官网文档学习笔记(七)--3.4.2
3.4.2 依赖与配置的细节 3.4.2.1 Straight values (primitives, Strings, and so on) JavaBeans PropertyE ...
- Spring3.0官网文档学习笔记(二)
1.3 使用场景 典型的成熟的spring web应用 spring使用第三方框架作为中间层 远程使用场景 EJB包装 1.3.1 依赖管理.命名规则(包) spring-*.jar *号代表 ...
- android官网文档学习笔记
1.android的四大组件的了大概功能 activity:负责显示界面,和用户交互. service:运行在后台. content provider:为程序app之间的数据访问提供接口. broad ...
- Spring3.0官网文档学习笔记(四)--3.1~3.2.3
3.1 Spring IoC容器与Beans简单介绍 BeanFactory接口提供对随意对象的配置: ApplicationContext是BeanFactory的子接口.整合了Sp ...
- 你会阅读appium官网文档吗
高效学习appium第一步,学会查看appium官方文档.如果能把appium文档都通读一遍,对学习appium大有益处. 而能做到通读appium官方文档的人,想必不是很多,刚开始学习appium的 ...
随机推荐
- 报错:SyntaxError: Non-ASCII character '\xe4' in file
SyntaxError: Non-ASCII character '\xe1' in file recommendation.py on line 1, but no encoding declare ...
- java中 flush()方法的作用
flush() 是清空,而不是刷新啊.一般主要用在IO中,即清空缓冲区数据,就是说你用读写流的时候,其实数据是先被读到了内存中,然后用数据写到文件中,当你数据读完的时候不代表你的数据已经写完了,因为还 ...
- Mysql优化之优化工具profiling
程序员的成长之路 2016-11-23 22:42 Mysql优化之优化工具profiling 前言 mysql优化技术: mysql优化不是做一个操作就可以的优化,它包含很多的细节,需要一点一点的优 ...
- MySQL高可用系列之MHA(二)
一.參数说明 MHA提供了一系列配置參数.深入理解每一个參数的详细含义,对优化配置.合理使用MHA非常重要.非常多高可用性也都是通过合理配置一些參数而实现的. MHA包含例如以下配置參数,分别说明例如 ...
- [ReactVR] Add Shapes Using 3D Primitives in React VR
React VR ships with a handful of 3D primitives. We'll importprimitives like <Sphere/>, <Box ...
- jQuery——map()函数以及它的java实现
map()函数小简单介绍 map()函数一直都是我觉得比較有用的函数之中的一个,为什么这么说呢? 先来考虑一下.你是否碰到过下面场景:须要遍历一组对象取出每一个对象的某个属性(比方id)而且用分隔符隔 ...
- MapReduce(十六): 写数据到HDFS的源代码分析
1) LineRecordWriter负责把Key,Value的形式把数据写入到DFSOutputStream watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZ ...
- [Hibernate]Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
使用Hibernate官方文档上的下面代码进行測试时报出这个异常. org.hibernate.HibernateException: Access to DialectResolutionInfo ...
- c++:数据类型的推断type_traits
//推断左值右值引用 void main() { int i(10);//i是左值 有内存实体 int &ri(i); int &&rri(i + 5);//右值引用 cout ...
- Handler.post与View.post的区别
Android的线程分UI线程与非UI线程两类.而Handler是非UI线程向UI线程传递消息的桥梁. 除了非常常用sendMessage之外,Handler也提供了post(Runnable...) ...