MongoDB Sharding 分片集群配置理论

Stella981
• 阅读 629

分片集群

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

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

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

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

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

MongoDB Sharding 分片集群配置理论

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

MongoDB Sharding 分片集群配置理论

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.

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
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
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
MongoDB分片(Sharding)技术
分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法。尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事。和MySQL分区方案相比,MongoDB的最大区别在于它几乎能自动完成所有事情,只要告诉MongoDB要分配数据,它就能自动维护数据在不同服务器之间的均衡。2.1MongoDB
Stella981 Stella981
3年前
MongoDb分片集群认证
本文主要基于已经搭建好的未认证集群,结合上篇Mongodb副本集分片集群模式环境部署(https://www.cnblogs.com/woxingwoxue/p/9875878.html),MongoDb分片集群认证几个主要流程1.在分片集群环境中,副本集内成员之间需要用keyFile认证,mongos与配置服务器,副本集之间也要keyFi
Wesley13 Wesley13
3年前
MongoDB 分片管理(一)检查集群状态
一、检查集群状态1.1使用sh.status()查看集群摘要信息1、使用sh.status()可以查看分片信息、数据库信息、集合信息sh.status()如果数据块较多时,使用sh.status(true)又是输出会很多,就不会截断,要使用如下查看2、tooman
Stella981 Stella981
3年前
Mongodb集群节点故障恢复场景分析(转)
一个适当配置的Mongodb分片集群是没有单点故障。本文描述了分片集群中存在的几种不同的潜在的节点故障场景,以及Mongodb对这些节点故障是怎么处理的。1、Mongos节点宕机一个Mongos进程应该运行在每一个应用程序服务器上,这个服务器应该独占这个Mongos进程,并且通过它与分片集群来通讯。Mongos进程不是持久化的,相反,
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Wesley13 Wesley13
3年前
MongoDB 分片的原理、搭建、应用
一、概念:     分片(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fdocs.mongodb.org%2Fmanual%2Fcore%2Fshardingintroduction%2F)(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这