个人理解
mongoDB的框架,是我使用的所有数据库中最特别的一个,或者说是比较特殊的一种。
首先,框架相比hadoop,hbase之类的大数据库来说,构造比较简单。
其次,维持数据库使用的角色只有2中,mongod和mongos。
最后,shard分片中,依据结果导向,是去中心化的,即人人为我,我为人人,没有主从的概念,比较和谐。
mongoDB3.2.4 框架
构造如下所示:
角色
mongos
- 从config server中获取元数据,为用户的增删改查提供寻址服务。
- 解析用户的请求后,解析,获取对应的shard和chunk地址,进行检索和更新。
- write操作的时候,会检查对应的chunk数据块是否超出预定的大小(默认64M),如果超过,进行split.
- 解析用户的请求后,数据分散在多个shard时,向所属的所有shard发送请求,完后会根据各个shard反馈的结果进行合并最终的数据。
- 一般chunk split后,根据内部数据平衡的策略,会做chunk的负载均衡。
mongod:config server
存储所有数据的metadata数据。
- shard与chunk range key的对应关系。
- shard key与chunk的对应关系。
mongod:shard
- 存储数据,提供数据的高可用性和一致性。
- 根据存储引擎的不同,可以使用master-slave模型或者replica-set模型。mongodb3.0开始,默认的存储引擎是wireTiger,对应的就是副本集。
第一次研究调查,理解不对的地方,还请大家指摘。