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 的全局压缩技术,在提高压缩率的同时,能大幅提高随机查询的性能。