MongoDB高级知识

一.mongodb适合场景:

1.读写分离:
MongoDB服务采用三节点副本集的高可用架构,三个数据节点位于不同的物理服务器上,自动同步数据。Primary和Secondary节点提供服务。两个节点分别提供独立域名,配合MongoDB Driver可自行实现读取压力分配。
 
2.业务灵活多变:
由于MongoDB采用No-Schema的方式,对于初创型的业务非常适用,免去变更表结构的痛苦。用户可以将模式固定的结构化数据存储在RDS中,模式灵活的业务存储在 MongoDB中,高热数据存储在云数据库Memcache或云数据库Redis中,实现对业务数据高效存取,相应降低成本投入。
 
3.移动应用:
云数据库MongoDB版支持二维空间索引,可以完美的支撑基于位置查询的移动类APP的业务需求。同时MongoDB动态模式存储方式非常适合存储多重系统的异构数据, 满足移动APP应用的需求。
 
4.物联网应用:
云数据库MongoDB版性能极高,具备异步数据写入功能,特定场景下可达到内存数据库的性能,非常适合物联网高并发写入的场景。同时MongoDB的map-reduce功能 也可以将大量数据进行聚合分析。
 
5.核心日志系统:
云数据库MongoDB版在异步落盘场景下可提供极高的插入性能,具备内存数据库的处理能力。MongoDB提供二级索引功能满足动态查询的需求,并且可以利用map- reduce的聚合框架进行多维度的数据分析。

二.mongodb v3.4有那些更新:

1.更快的复制集全量同步:
在拷贝数据的时候,同时建立所有的索引(以前版本只有_id索引是在同步数据时建立的),拷贝数据的阶段,secondary 不断拉取新的 oplog,确保 secondary 的 local 数据库有足够的空间来存储这些临时数据。
 
2.更高效的负载均衡:
MongoDB 3.2及以前版本里,分片集群的负载均衡由mongos负责,多个 mongos 会抢一个分布式锁,抢锁成功的 mongos 会对执行负载均衡任务,在shard间迁移chunk;在3.4版本里,负载均衡将由config server的 primary 节点负责,负载均衡并发度及效率上会有大的提升。
 
3.更丰富的Aggregation操作:
MongoDB 在3.4版本增加了大量的 aggregation 操作符,数据分析功能更加强大,如bucket 能方便的对数据进行分类;$grahpLookup 在 3.2的$lookup 的基础上更进一步,能支持更复杂的关系运算;$addFields使得文档操作更丰富,比如将某些字段求和存储为新的字段。
 
4.支持 Sharding Zones:
分片集群里引入了 Zone 的概念,主要取代现在的 tag-aware sharding 机制,能将某些数据分配到指定的一个或多个 shard 上,这个特性将极大的方便 sharding cluster 的跨机房部署。
 
5.支持 Collation:
MongoDB 3.4 开始支持 collation,在之前的版本里,文档里存储的字符串,不论是中文还是英文,不论大小写,一律按字节来对比,引入 collation 后,支持对字符串的内容进行解读,可以按使用的 locale 进行对比,也支持对比时忽略大小写。
 
6.支持只读视图(Read-only views):
MongoDB 3.4里增加了对只读视图的支持,视图将集合里满足某个查询条件的数据虚拟成一个特殊的集合,用户可以在特殊的集合上做进一步的查询操作。

7.引擎更新换代:

WiredTiger存储引擎:基于 btree 结构组织数据,相比 MongoDB早期的 mmapv1 存续引擎性能上有非常大的提升,而且支持数据压缩,存储成本更低。
RocksDB存储引擎:是基于 LSM tree 结构组织数据,其针对写入做了优化,将随机写入转换成了顺序写入,能保证持续高效的数据写入。
TerarkDB存储引擎:借助 TerarkDB 的全局压缩技术,在提高压缩率的同时,能大幅提高随机查询的性能。

最新文章

  1. C++智能指针
  2. Ubuntu 16.04安装QQ国际版图文详细教程
  3. BZOJ2007——[Noi2010]海拔
  4. WebService异常时,查看请求状态码方法
  5. linux配置IP的方法
  6. 01背包 ZOJ 3931 Exact Compression
  7. sqlite 对表的操作
  8. Maven之(二)Maven生命周期
  9. kafka c++客户端编译
  10. [Git]04 如何使用标签
  11. Max Sum(dp)
  12. 【Android Studio安装部署系列】七、真机运行项目
  13. R语言绘制QQ图
  14. js获取谷歌浏览器版本 和 js分辨不同浏览器
  15. ASP.NET之使用Ajax实现页面异步刷新(无需刷新整个页面)
  16. CommonJS, AMD, CMD是什么及区别--简单易懂有实例
  17. bind,apply,call的区别
  18. gluoncv,faster rcnn 处理难样本
  19. 【297】IDL 过程、函数&关键字参数
  20. 【python】10分钟教你用python如何正确把妹

热门文章

  1. iOS学习之UIPickerView控件的关联选择
  2. mysql oracle计算两点之间的距离
  3. OC中数组排序总结
  4. Convert Sorted Array to Binary Search Tree数组变成高度平衡的二叉树
  5. DapperExtensions 使用教程
  6. monkeyrunner小结
  7. libevent学习
  8. java修饰符 protect public protected
  9. HDU 6125 Free from square (状压DP+背包)
  10. 编写高质量代码改善C#程序的157个建议——建议89:在并行方法体中谨慎使用锁