MongoDB 分片的原理、搭建、应用(九)
来源:互联网 发布:淘宝圭亚那粉趾 编辑:程序博客网 时间:2024/06/05 10:32
一、概念:
分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程。将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载。基本思想就是将集合切成小块,这些块分散到若干片里,每个片只负责总数据的一部分,最后通过一个均衡器来对各个分片进行均衡(数据迁移)。通过一个名为mongos的路由进程进行操作,mongos知道数据和片的对应关系(通过配置服务器)。大部分使用场景都是解决磁盘空间的问题,对于写入有可能会变差(+++里面的说明+++),查询则尽量避免跨分片查询。使用分片的时机:
1,机器的磁盘不够用了。使用分片解决磁盘空间的问题。2,单个mongod已经不能满足写数据的性能要求。通过分片让写压力分散到各个分片上面,使用分片服务器自身的资源。3,想把大量数据放到内存里提高性能。和上面一样,通过分片使用分片服务器自身的资源。
二、部署安装: 前提是安装了mongodb(本文用3.0测试)
在搭建分片之前,先了解下分片中各个角色的作用。
① 配置服务器。是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息。最先开始建立,启用日志功能。像启动普通的mongod一样启动配置服务器,指定configsvr选项。不需要太多的空间和资源,配置服务器的1KB空间相当于真是数据的200MB。保存的只是数据的分布表。当服务不可用,则变成只读,无法分块、迁移数据。② 路由服务器。即mongos,起到一个路由的功能,供程序连接。本身不保存数据,在启动时从配置服务器加载集群信息,开启mongos进程需要知道配置服务器的地址,指定configdb选项。③ 分片服务器。是一个独立普通的mongod进程,保存数据信息。可以是一个副本集也可以是单独的一台服务器。
一:分片
mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案。
下面我对这张图解释一下:
人脸:代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的。
mongos:首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值进行拆分集合....好了,mongos就是一个路由服务器,它会根据管理员设置的“片键”将数据分摊到自己管理的mongod集群,数据和片的对应关系以及相应的配置信息保存在"config服务器"上。
mongod:一个普通的数据库实例,如果不分片的话,我们会直接连上mongod。
二: 实战
首先我们准备4个mongodb程序,我这里是均摊在C,D,E,F盘上,当然你也可以做多个文件夹的形式。
1:开启config服务器
先前也说了,mongos要把mongod之间的配置放到config服务器里面,理所当然首先开启它,我这里就建立2222端口。
2: 开启mongos服务器
这里要注意的是我们开启的是mongos,不是mongod,同时指定下config服务器,这里我就开启D盘上的mongodb,端口3333。
3:启动mongod服务器
对分片来说,也就是要添加片了,这里开启E,F盘的mongodb,端口为:4444,5555。
4: 服务配置
哈哈,是不是很兴奋,还差最后一点配置我们就可以大功告成。
<1> 先前图中也可以看到,我们client直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将4444,5555的mongod交给mongos,添加分片也就是addshard()。
这里要注意的是,在addshard中,我们也可以添加副本集,这样能达到更高的稳定性。
<2>片已经集群了,但是mongos不知道该如何切分数据,也就是我们先前所说的片键,在mongodb中设置片键要做两步
①:开启数据库分片功能,命令很简单 enablesharding(),这里我就开启test数据库。
②:指定集合中分片的片键,这里我就指定为person.name字段。
5: 查看效果
好了,至此我们的分片操作全部结束,接下来我们通过mongos向mongodb插入10w记录,然后通过printShardingStatus命令查看mongodb的数据分片情况。
这里主要看三点信息:
① shards:我们清楚的看到已经别分为两个片了,shard0000和shard0001。
② databases:这里有个partitioned字段表示是否分区,这里清楚的看到test已经分区。
③ chunks:这个很有意思,我们发现集合被砍成四段:无穷小 —— jack0,jack0 ——jack234813,jack234813——jack9999,jack9999——无穷大。分区情况为:3:1,从后面的 on shardXXXX也能看得出。
参考:
https://www.cnblogs.com/zhoujinyi/p/4635444.html
https://kb.cnblogs.com/page/152995/
- MongoDB 分片的原理、搭建、应用(九)
- MongoDB 分片的原理、搭建、应用
- MongoDB 分片的原理、搭建、应用
- MongoDB 分片的原理、搭建、应用
- MongoDB 分片的原理、搭建、应用
- MongoDB学习3_MongoDB 分片的原理、搭建、应用
- mongodb分片的原理与搭建
- MongoDB分片的搭建
- MongoDB 基础(九)分片
- mongodb分片集群的搭建
- MongoDB 副本集的原理、搭建、应用
- MongoDB 副本集的原理、搭建、应用
- mongodb的分片(多字段),分片分裂原理
- Mongodb的副本、分片搭建方式
- Mongodb简单的分片搭建与测试
- 搭建mongodb集群(副本集+分片)
- 搭建mongodb集群(副本集+分片)
- Mongodb分片搭建(单实例)
- ZooKeeper和CAP理论及一致性原则
- Node.js基础代码示例,带注释
- android M fingerprint 解析
- springcloud实战之14动态刷新分布式配置中心属性配置(config)
- 我的博客
- MongoDB 分片的原理、搭建、应用(九)
- C语言中操作符的总结
- leetcode 652. Find Duplicate Subtrees Map记录 + 深度优先遍历DFS
- is too old(format 29) to work with client version '1.8.13(r1667537)'(expects format 31). you need to
- MVC几种找不到资源的问题解决办法
- Spring(四)---高级装配(2)
- 通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型, 能够利用接口和多态性计算几何图形的面积和周长并显示
- POJ 3096.Surprising Strings
- gradle 使用心得