分片集群
MongoDB的分片集群由以下部分组成:
shard: 用来存储数据,为这个分片集群提供高可用和数据一致性。在一个生产环境中,每个shard都是一个replica set 副本集。
mongos: 作为一个查询路由器,提供客户端应用程序和分片集群之间的接口。
config servers: 配置服务器存储群集的元数据和配置。作为MongoDB 3.2,配置服务器可以部署为一个副本集。
下面的图形描述了组件的相互作用分片集群内:
MongoDB shards data at the collection level, distributing the collection data across the shards in the cluster.
分片key【Shard Keys】
片键决定了集群中一个集合的 documents 在不同 shards 中的分布.MongoDB 使用 分片可以分区存储数据集合.
当分片一个集合是时你需要选择一个分片,如果选定了一个分片后是不能在改变分片,一个分片集合仅能有一次分片,更多看Shard Key Specification.
一定是分片的是非空集合。这个集合的分配key必须是一个索引(index)选好片键后,MongoDB将不允许插入没有片键的文档,但是允许不同文档的片键类型不一样。
块【Chunks】
在一个shard server内部,MongoDB还是会把数据分为chunks,每个chunk代表这个shard server内部一部分数据。chunk的产生,会有以下两个用途
Splitting:
当一个chunk的大小超过配置中的chunk size时,MongDB的后台进程会把这个chunk切分成更小的 chunk,从而避免chunk过大的情况
Balancing:
在MongoDB中,balancer是一个后台进程,负责chunk的迁移,从而均衡各个shard server的负载
分片的优点 【Advantages of Sharding】
Reads / Writes
MongoDB读写负载分配到各分片集群中的片中,允许每个切分处理集群操作的一个子集。读写工作负载可以在横向扩展集群通过添加更多的分片。
对于查询,包括碎片钥匙或复合碎片关键前缀,人可以针对查询在一个特定的碎片或碎片。这些有针对性的操作一般比广播更有效的在集群中的每一个碎片。
For queries that include the shard key or the prefix of a compound shard key, mongos can target the query at a specific shard or set of shards. These targeted operations are generally more efficient than broadcasting to every shard in the cluster.
Tag Aware Sharding
在分片集群,您可以标记的分片的特定关键范围和关联标签分片或子集的分片。MongoDB路线读取和写入落入一个标记的范围仅限于那些分片分配标签。此外,平衡方面的标签在通过确保每个分片只包含数据,不违反其配置标签范围平衡轮。
In sharded clusters, you can tag specific ranges of the shard key and associate those tags with a shard or subset of shards. MongoDB routes reads and writes that fall into a tagged range only to those shards assigned that tag. Additionally, the balancer respects tags during balancing rounds by ensuring that each shard only contains data that does not violate its configured tag ranges.