Mongodb 笔记07 分片

分片

1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程。有时也用分区(partitioning)来表示这个概念。将数据分散到不同的机器上,不需要功能强大的大型计算机就可以

存储更多的数据,处理更大的负载。

2. MongoDB支持自动分片(autosharding),可以使数据库架构对应用程序不可见,也可以简化系统管理。对应用程序而言,好像始终在使用一个单机的MongoDB服务器一样。另一方面,

mongoDB自动处理数据在分片上的分布,也更容易添加和删除分片技术。

3. 复制与分片的区别:复制时让多台服务器都拥有同样的数据副本,每一台服务器都是其他服务器的镜像,而每一个分片都和其他分片拥有不同的数据子集。

4. 路由服务器:为了对应用程序隐藏数据库架构的细节,在分片之前要先执行mongos进行一次路由过程。这个路由服务器维护这一个"内容列表",指明了每个分片包含什么数据内容。应用

程序只需要连接路由服务器,就可以像使用单机一样进行正常的请求了。

5. 运行sh.status()可以看到集群的状态:分片摘要信心、数据库摘要信息、集合摘要信息。

6. 要对一个集合分片,首先你要对这个集合的数据库启用分片,执行如下命令:sh.enableSharding("test")

7. 片键:片键是集合的一个键,MongoDB根据这个键拆分数据。例如:username 。在启用分片之前,现在希望作为片键的键上创建索引:db.users.ensureIndex({"username":1})

8. 对集合分片:sh.shardCollection("test.users",{"username":1})

9. 集合被拆分为多个数据块,每个数据块都是集合的一个数据子集。这是按照片键的范围排列的({"username":minValue}-->>{"username":maxValue}指出了每个数据块的范围)。

10. 包含片键的查询能够直接被发送到目标分片或者是集群分片的一个子集。这样的查询叫做定向查询(targetd query)。有些查询必须被发送到所有分片,这样的查询叫做分散-聚合查询(

scatter-gather query);mongos将查询分散到所有的分片上,然后经各个分片的查询结果聚集起来。

11. cluster.stop() 关闭整个集群。

BSON类型

配置分片:

1. 何时进行分片:决定何时分片是一个值得权衡的问题。通常不必太早分片,因为分片不仅会增加部署的操作复杂度,还要求做出设计决策,而改决策以后很难再改。另外最好也不要在系统

运行太久之后再分片,因为在一个过载的系统上不停机进行分配是很困难的。

2. 分片的目的:增加可用的RAM,增加可用磁盘空间,减轻单台服务器的负载,处理单个mongod无法承受的吞吐量。

3. 一般情况下至少应该创建3个或者以上的分片。

4. 启动服务器:

1). 配置服务器:配置服务器相当于集群的大脑,保存着集群和分片的元数据,即各分片包含哪些数据的信息。因此,应该首先建立配置服务器,监狱它所包含的的数据极端重要性,必须启用

其日志功能,并确保其数据保存在非易失性驱动器上。每个配置服务器都应该位于单独的物理机上,最好是分布在不同地址位置的机器行。

a. 启动配置服务器:mongod --configsvr --dbpath  /var/lib/mongodb -f  /var/lib/config/mognd.conf  。需要启动三台配置服务器,且都是可写的。

为什么是3台配置服务器?因为我们需要考虑不时之需。但是,也不需要过多的配置服务器,因为配置服务器上的确认操作比较耗时。另外,如果有服务器宕机了,集群元数据就会变成只读的。

--configsvr 选项指定mongod为新配置服务器。该选项并非必选项,因为它所做的不过是将mongod的默认监听端口改为27019,并大默认的数据目录改为/data/configdb而已(可以使用

--port 和 --dbpath 选项修改这两项配置)。但建议使用--configsvr选项,因为它比价直白地说明了这些配置服务器的用途。

配置服务器的1KB相当于200MB知识数据,它保存的真实数据的分布表。由于配置服务器并不需要太多的资源,因此可以将其部署在运行着其他程序的服务器上。

2). mongos进程:三个配置服务器均处于运行状态后,启动一个mongos进程供应用程序连接。mongos进程需要配置服务器的地址,所以必须使用--configdb选项启动mongos:

mongos --configdb config-1:27019,config-2:27019,config-3:27019 -f /var/lib/mongos.conf

默认情况下,mongos运行在27017端口。mongos本身不保存数据,它会在启动时从配置服务器加载集群数据。

可以启动任意数量的mongos进程。通常的设置时每个应用程序服务器使用一个mongos进程(与应用服务器运行在同一台机器上)

每个mongos进程必须按照列表排序,使用相同的配置服务器列表。

3). 将副本集转换为分片:有两种可能性:已经有一个副本集,或者从零开始建立集群。下例假设我们已经拥有了一个副本集。如果是从零开始的话,可先初始画一个空的副本集,然后按照本例操作。

a. 告知mongos副本集名称和副本集成员列表:sh.addShard("spock/server-1:27017,server-2:27017,server-4:27017")  mongos能够自动检测到没有包含在副本集成员表中的成员。

b. 副本集作为分片添加到集群后,就可以将应用程序设置从连接到副本集改为连接到mongos。

c. 副本集名称spokc被作为分片名称。如果之后希望移除这个分片或者是向这个分片迁移数据,可以使用spock来标志这个分片。

d. 配置完分片后,必须将客户端设置为将所有请求发送到mongos,而不是副本集。同时配置防火墙规则,以确保客户单不能直接将请求发送到分片。

e. 有一个--shardsvr选项,与前面介绍的--configsvr选项类似,它也没什么实用性(只是将默认端口改为27018),但在操作中建议使用该选项。

f. 不建议创建单mongod服务器分片(而不是副本集分片),将单一服务器分片转换为副本集需要停机操作。

4). 增加集群容量:通过增加分片来增加集群容量。

5). 数据分片:除非明确指定规则,否则MongoDB不会自动对数据进行拆分。如果有必要,必须明确告知数据库和集合。加入对music数据库中的artists集合按照name进行分片,

db.enableSharding("music") 对数据库分片是对集合分片的先决条件

sh.shardCollection("music.artists",{"name":1})   对集合分片,集合会按照name键进行分片。如果是对已存在的集合分片,那么name键上必须有索引,否则会返回错误。

shardCollection()命令会经集合拆分为多个数据块,这是MongoDB迁移数据的基本单元。命令执行后,MongoDB会均衡的将数据分散到集群的分片上。

时间: 2024-10-11 23:07:43

Mongodb 笔记07 分片的相关文章

【MongoDB】03、MongoDB索引及分片

一.MongoDB配置 mongodb配置文件/etc/mongodb.conf中的配置项,其实都是mongod启动选项(和memcached一样) [[email protected] ~]# mongod --help Allowed options: General options:   -h [ --help ]               show this usage information   --version                   show version inf

Mongodb副本集和分片的概念

副本集(Replica Set): 通俗的说,副本集就是集群,主从复制,读写分离,故障切换. 副本集是Mongodb原来的主从模式的升级版本,官方已经不再推荐使用主从模式. MongoDB的副本集与主从有所不同,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况. mongodb的复制至少需要两个节点.其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据. mongodb各个节点常见的搭配方式为:一主一从.一主多从. 主

C++ GUI Qt4学习笔记07

C++ GUI Qt4 qtc++scrollobject编程 事件(event)是由串口系统或者Qt自身产生的,用以响应所发生的各类事情.当用户按下或者松开键盘或者鼠标上的按键时,就可以产生一个键盘或者鼠标事件:当某个窗口第一次显示的时候,就会产生一个绘制事件.用来告知窗口需要重绘制它本身,从而使得该窗口可见. 使用Qt进行编程开发时,基本不需要考虑事件,Qt窗口部件都会发射信号.但是当我们需要编写自己的自定义窗口部件,或者是当我们希望改变已经存在的Qt窗口部件的行为时,事件就变得非常有用了.

《30天自制操作系统》笔记(07)——内存管理

<30天自制操作系统>笔记(07)--内存管理 进度回顾 上一篇中处理掉了绝大部分与CPU配置相关的东西.本篇介绍内存管理的思路和算法. 现在想想,从软件工程师的角度看,CPU也只是一个软件而已:它的功能就是加载指令.执行指令和响应中断,而响应中断也是在加载指令.执行指令.就像火车沿着一条环形铁轨前进:当中断发生时,就好像铁轨岔口处变轨了,火车就顺着另一条轨迹走了:走完之后又绕回来重新开始.决定CPU是否变轨的,就是CPU里的特定寄存器. 这是题外话,就此为止. 什么是内存管理 假设内存大小是

MongoDB中的分片

通过分片能够增加更多的机器来应对不断增加的负载和数据,还不影响应用.分片(sharding)是指将数据拆分,将其分散到不同的机器上,不需要功能强大的大型计算机就可以存储更多的数据,处理更大的负载. MongoDB支持自动分片,可以摆脱手动分片的管理困扰,集群自动切分数据,做负载均衡.分片的基本思想就是将集合切分成小块,这些块分散到若干片里面,每个片只负责总数据的一部分.应用程序不必知道哪片对应哪些数据,甚至不知道数据已经拆分,所以在分片之前要运行一个路由进程(mongos),这个路由知道所有数据

学习笔记 07 --- JUC集合

学习笔记 07 --- JUC集合 在讲JUC集合之前我们先总结一下Java的集合框架,主要包含Collection集合和Map类.Collection集合又能够划分为LIst和Set. 1. List的实现类主要有: LinkedList, ArrayList, Vector, Stack. (01) LinkedList是双向链表实现的双端队列:它不是线程安全的.仅仅适用于单线程. (02) ArrayList是数组实现的队列,它是一个动态数组.它也不是线程安全的,仅仅适用于单线程. (03

YII2操作mongodb笔记(转)

返回博客列表 原 YII2操作mongodb笔记 风清扬-深圳 发布时间: 2015/12/17 15:20 阅读: 895 收藏: 2 点赞: 0 评论: 0 操作之前得保证已经安装了mongodb,windows下安装可参考另一篇博文: http://my.oschina.net/chinahub/blog/479268 componets配置: 'mongodb' => [     'class' => '\yii\mongodb\Connection',     'dsn' =>

《机电传动控制》学习笔记-07

<机电传动控制>学习笔记07 胡恒谦 机卓1301 (注:本周补上第7周的学习笔记) PLC的编程元件: PLC内部有许多不同功能的器件,实际上这些器件是由电子电路和存储器组成的. 1.  输入继电器X 输入继电器由输入电路和输入寄存器组成,输入电路进行开关信号到数字量的转换,输入寄存器为映像输入信号的存储器. 2.  输出继电器Y 输出继电器由输出电路和输出寄存器组成.为适应不同的负载,输出电路一般有晶体管.晶闸管和继电器输出三种方式. 3.  定时器T 定时器又称时间继电器,由设定值寄存器

Mongodb 部署一个分片集群

根据下面的任务顺序来部署一个分片集群: 警告 分片和"localhost"地址 如果你使用"localhost"或者是127.0.0.1 作为任一节点标识的主机名部分,例如addShard 方法的host 参数或者是运行时操作 --configdb的值,那么你必须为集群中的所有MongoDB的所有节点设置都使用"localhost"或者是127.0.0.1.如果你把本地地址和远程地址混合使用的话,MongoDB将会出现错误. 启动Config S