MongoDB Sharding 分片集群配置理论

分片集群

   MongoDB的分片集群由以下部分组成:

shard: 用来存储数据,为这个分片集群提供高可用和数据一致性。在一个生产环境中,每个shard都是一个replica set 副本集。

mongos: 作为一个查询路由器,提供客户端应用程序和分片集群之间的接口。

config servers: 配置服务器存储群集的元数据和配置。作为MongoDB 3.2,配置服务器可以部署为一个副本集。

下面的图形描述了组件的相互作用分片集群内:

Diagram of a sample sharded cluster for production purposes.  Contains exactly 3 config servers, 2 or more mongos query routers, and at least 2 shards. The shards are replica sets.

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路线读取和写入落入一个标记的范围仅限于那些分片分配标签。此外,平衡方面的标签在通过确保每个分片只包含数据,不违反其配置标签范围平衡轮。

Diagram of tag-aware data distribution

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.

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

MongoDB分片(Sharding)技术

分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事。和MySQL分区方案相比,MongoDB的最大区别在于它几乎能自动完成所有事情,只要告诉MongoDB要分配数据,它就能自动维护数据在不同服务器之间的均衡。2.1MongoDB