首页 > 数据库 > NoSQL > MongoDB技术分析(4)- 对象模型
MongoDB数据库的对象模型,用MongoDB的术语叫做Catalog,包括逻辑上的对象Database、Collection、View,以及偏物理概念的对象Shard、Chunk、Zone之类的。
对象模型
Shard
Shard是组成集群的物理节点,通常由一个复制集组成,Shard还可以设置多个tag标签,用于定制Collection数据的分布位置。
string _name; // shard's id string _host; // connection string vector<string> _tags; // shard tags
和关系型数据库的Database概念相同,在MongoDB中仅是当做Collection的Namespace在使用,每个Database在创建时都会随机选择一个Shard作为其primary shard,用于存储其下的Non-Shard Collection数据,以及View的定义和执行。
string _name; // 数据库名称 ShardId _primary; // 数据库的primary shard bool _sharded; // 该数据库是否支持sharding
Collection对应关系型数据库中Table的概念,支持Non-Shard Collection和Shard Collection两种类型,Non-Shard Collection的数据仅存储在所属数据库的Priamry Shard节点上,Shard Collection则打散存储在所有Shard节点上,或者具有对应tag属性的Shard节点上。
NamespaceString _fullNs; // Collection Name KeyPattern _keyPattern; // Sharding key bool _unique; // Sharding key是否是唯一索引
Chunk是Collection的一段key range,Shard Collection以Chunk为单位打散存在多个Shard节点上,打散的方式支持range partition和hash partition两种方式。Chunk还是Rebalance的最小粒度,通过在不同Shard间迁移Chunk实现Shard间的负载均衡,Chunk还支持分裂,当单个Chunk容量达到阈值后触发分裂,生成多个Chunk。
std::string _ns; // 归宿collection BSONObj _min; // key范围的下限 BSONObj _max; // key范围的上限 ShardId _shard; // 当前所在shard
Collection除了均衡打散到所有Shard节点外,还支持根据tag打散到制定Shard节点。可以给每个Collection的不同key range定位为特定的tag,这样这部分数据只会打散存储到拥有该tag定义的shard节点上,特别适合跨地域部署时的就近访问。
std::string _ns; // tag归宿的collection std::string _tag; // tag name BSONObj _minKey; // key范围的下限 BSONObj _maxKey; // key范围的上限
View是一个逻辑概念,是对同一个Database下,一个或多个Collection的只读操作定义,View的定义和执行由该View所在Database的Primary Shard执行。
Catalog的实现
上面的对象模型,除view外,都存储在ConfigServer的config数据库中,分别对应Collection为:
config.shards
config.databases
config.collections
config.chunks
config.tags
Mongos在处理DDL类的Command时,由catalog模块负责和ConfigServer交互操作对应的Collection,主要设计如下图所示:
ShardingCatalogManager和ShardingCatalogClient分别负责修改操作和只读操作,具体操作交由对应Shard对象执行,Shard再封装成Task交由固定的一个TaskExecutor线程执行。
这里有两个重要的缓存:
CatalogCache:缓存了所有Collection的ChunkMap,即Chunk在Shard的分布视图,读写操作通过查找该缓存来判断操作涉及哪些Shard节点;
ShardRegistry:缓存所有Shard节点和ConfigServer节点的连接及版本信息;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31556448/viewspace-2219254/,如需转载,请注明出处,否则将追究法律责任。