博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB【最新版V2.6】- 系列 2: shard 分片的介绍
阅读量:6976 次
发布时间:2019-06-27

本文共 1788 字,大约阅读时间需要 5 分钟。

hot3.png

阅读目的:深刻的了解MongoDB的分片机制

阅读关键: 无比要对MongoDB的与分片 shard有关的概念有清楚的了解。

 1:   Shard介绍

        shard指的是水平方向的多节点的数据分散的存储,说的更简单一点,就是一台机器上可能装不下的数据,我们

装到多台机器上去,比如,我们将全国的省份证的信息,存储到不同的Shard Server中间去,这里的Shard Server,就是每一个分布式的Mongo机器。

        应用的程序可以通过mongos process 登陆到shard集群之中,MongoPress 进行一个路由上的调度。查询,请求的过程也是如此。 面对使用者只有一层一个节点。

    

2: 负载均衡和失效切换

        当某个shard的负载超过一定阙值后,就会自动的重新分发数据,用来保证系统的负载均衡。更简单的话来形容,就是

写入的时候如果向某一台机器上去写,超过了机器自身的能力了,就会重新的分发数据,与之对应的Hbase,通常会出现单台

写入的热点问题,目前对于Mongo的处理机制还未知。

      在一个通常的配置之中,每一个Shard中都该包含了2个以上节点的设备组,设备组的名字通常称为 replica.set,replica.set有N台服务器,在其中有一个为主,其他的为辅助,一旦其中的一个挂掉以后,会自动重启将一台服务器切换为

主服务器。

3:

    Shard架构图:

        132355_mQQf_1791874.png

        

4 :shard key 

            要实现分片功能,我们需要指定集合的分片key,相当于数据库的分区字段,

这个分片key通常需要创建一个索引,分片key可以由一个或则多个字段构成

5: chunks

        Chunks是一个集合之中的一段连续的数据,当一个Chunk达到一定大小的时候,就会开始分裂。当一个

shard超过一定量的数据时,chunk会被迁移到其他shard之中,新增shard也会影响chunk的移动,好比你把日志

写入到你的本地文件,规定是60M的一个文件,一旦超过大小,就有新的文件,一旦文件在机器上存放不了了,

那就将这台机器上的文件转移到其他的机器上去~        

  MongoDB的shard,四环一种将海量的数据水平扩展的数据库集群系统,数据库分表存放在Sharding的

各个节点之上。

相对于关系数据库而言,Chunk就是数据库中的一行记录,Collection就是对于与关系数据库中的表。

Shard Server

即存储实际数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Set。为了实现每个Shard内部的auto-failover,MongoDB官方建议每个Shard为一组Replica Set。关于如何安装及搭建replica set请参考我的另一篇文章 http://gong1208.iteye.com/blog/1558355

 

Config Server

为了将一个特定的collection存储在多个shard中,需要为该collection指定一个shard key,例如{age: 1} ,shard key可以决定该条记录属于哪个chunk。Config Servers就是用来存储:所有shard节点的配置信息、每个chunk的shard key范围、chunk在各shard的分布情况、该集群中所有DB和collection的sharding配置信息。

说的更加明白一点,Config Server 保存集群的元数据。

 

Route Process

这是一个前端路由,客户端由此接入,然后询问Config Servers需要到哪个Shard上查询或保存记录,再连接相应的Shard进行操作,最后将结果返回给客户端。客户端只需要将原本发给mongod的查询或更新请求原封不动地发给Routing Process,而不必关心所操作的记录存储在哪个Shard上。

route process 说的更明白点就是一个选择器,不断的调度合适的客户端请求,将需求中所请求,所需要的数据,从合适的shard之中返回你所需求的数据。

下面我们在同一台物理机器上构建一个简单的 Sharding Cluster:

架构图如下:

     104928_CinJ_1791874.png

转载于:https://my.oschina.net/infiniteSpace/blog/330104

你可能感兴趣的文章
sersync实时同步
查看>>
修改Http消息的消息头Host
查看>>
获取ActionBar高度
查看>>
.NET面试题解析(06)-GC与内存管理
查看>>
[Android学习笔记]Context简单理解
查看>>
为确保固定资产的财务帐与实物帐一致,应采取的措施
查看>>
Codeforces Round #224 (Div. 2)
查看>>
linux基础—课堂随笔05_文本三剑客之SED
查看>>
MVC 数据验证
查看>>
TCP协议发送/接收数据
查看>>
python 3.5 连接mysql数据库
查看>>
输入和输出
查看>>
UITouch 点击事件
查看>>
mongodb shell 操作
查看>>
Android:TabLayout的一些设置
查看>>
汉字拼音带声调和发音mp3文件(C#源程序)
查看>>
qemu:///system 没有连接驱动器可用;读取数据时进入文件终点: 输入/输出错误
查看>>
json xmpp
查看>>
【转载】Node.js + WebSocket 实现的简易聊天室
查看>>
理解MapReduce计算构架
查看>>