什么是MongoDB分片

  介绍

本篇文章为大家展示了什么是MongoDB分片,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强>一、分片

分片,也叫做分区,是一种常用的数据库优化技术。其含义就是将数据拆分,将数据分散到不同机器上的过程。这样就能够使得系统可以存储更多的数据,处于更大的负载只

几乎所有的数据库软件都可以进行手动分片,通过应用程序管理不同服务器上的不同数据,查询也需要寻找正确的服务器。这样虽然可以减轻负载,但是却难以维护,比如我们向集群添加节点或者删除节点,都需要对应的调整数据的分布只

MongoDB在这一点上做得不错,它支持自动分片,集群可以自动切分数据,达到负载均衡,从而使管理人员可以摆脱手动分片。

<强>二,蒙戈的分片

下面说说分片的原理.MongoDB分片的基本思想就是将集合切分成小块,这些块分散到若干片里面,每个片只负责总数据的一部分只

应用程序不需要知道哪些片对应哪些数据,也不需要知道数据是否已经拆分.MongoDB通过另外一个独立的路由进程蒙戈来实现这个功能只

蒙戈路由进程知道所有数据的存放位置,所以应用可以连接它来正常发送请求。而对于应用来说,自己只知道连接了一个普通的mongod。也就是说,蒙戈对应用隐藏了分片的细节只

为什么要隐藏了?其实就是为了拓展的时候,不必修改应用程序的代码。

<强>应用场景

说完了原理,那什么时候需要用到分片呢?有以下几种情况:,

1。机器的磁盘不够用了;

2。单个mongodb已经不再满足性能需要,

3。想将大量数据放入内存提高性能。

一般来说,先从不分片开始,然后在需要的时候将其转换成分片。

<强>片键

设置分片时,需要从集合里面选一个键,用该键的值作为数据拆分的依据。这个键成为片键只

假设有个文档集合表示的是人员,如果选择名字“name”做为片键,第一篇可能会存放名字以f开头的文档;第二片存表压开头的文档;第三篇存Q-Z的文档只

随着增加或删除片,MongoDB会重新平衡数据,使得每片的流量比较均衡,数据量也在合理范围内。

那么我们应该如何选择片键呢?,

如果我们选择了时间属性的键作为片键,那么随着时间增长,所有的文档都会以最后一片插入。这就不适合写入操作负载很高的情况,但是查询起来就比较方便只

如果我们选择了分布均匀的片键,就会提高写入操作的负载能力,但是就会影响查询的性能只

我们也可以选择复合片键,将两个属性键结合为一个片键只

其实和索引的原理相似,事实上,片键也是最常用的索引。

<强>三、分片你来试试

1, MongoDB分片的基本结构包括:多个数据库节点碎片,configserver,蒙戈组成。

shard1,碎片.....:mongodb服务的片节点。存储数据。

configserver:维护元信息,判断某条数据存储到哪台节点的服务器上。本身不存储数据

孟淑娟:查询数据时,要先找到configserver,询问查询的数据到哪个碎片上取数据。

2,搭建碎片分片节点服务器。首先启动27017和27018两个实例节点做分片服务器。

①,创建服务器存储数据的数据库路径和日志路径。其中m17星云,m18作为分片服务器,m20作为configserver服务器。

mkdir  -p /home/m17 /home/m18 /home/m20 /home/mlog

②,启动两个分片服务器实例

/bin/mongod ——dbpath /home/m17 ——logpath /home/mlog/m17.log ——fork ——port  27017,——smallfiles ——journal    -storageEngine=mmapv1 /bin/mongod ——dbpath /home/m18 ——logpath /home/mlog/m18.log ——fork ——port  27018,——smallfiles ——journal    -storageEngine=mmapv1

什么是MongoDB分片

③,启动configsvr服务器

/bin/mongod ——dbpath /home/m20 ——logpath /home/mlog/m20.log ——fork ——port  27020,——configsvr ——smallfiles ——journal    null

什么是MongoDB分片