当前位置:网站首页 / 数据库 / 正文

[AY-Mongo 3.x]写给自己的MongoDB笔记-分片技术实践[12]

时间:2015年11月11日 | 作者 : aaronyang | 分类 : 数据库 | 浏览: 1537次 | 评论 0

OK搞定,2015年11月11日     === AYUI www.ayjs.net AY 杨洋原创编写,请不要转载谢谢=====

下面是一张网上通用的讲解图,为什么拿来用,因为喜欢

blob.png

而我更喜欢这张图

blob.png


看了这么多,曾经了解过 mssql的分区,就是按照某个条件分成几个 ndf文件,这样查询时候就不用一次加载大量数据了。还可以把数据分到不同的磁盘上。我不知道mongo的分片是不是差不多的道理,先看下吧



我在F盘新建了mongoshard文件夹,然后拷贝bin下的文件

blob.png

然后赋值mongo1到mongo2到mongo3到mongo4

blob.png

然后我修改了名字

blob.png


开启config服务器8779

先前也说了,mongos要把mongod之间的配置放到config服务器里面,理所当然首先开启它,我这里就建立8779端口

F:\mongoshard\config\bin\mongod --dbpath=F:\mongoshard\config\bin --port 8779

blob.png

开启mongos服务器8800

这里要注意的是我们开启的是mongos,不是mongod,同时指定下config服务器,这里我就开启D盘上的mongodb,端口8800。

F:\mongoshard\mongos\bin\mongos --port 8800 --configdb=127.0.0.1:8779

blob.png


启动mongod服务器 8801 8802

对分片来说,也就是要添加片了,这里开启mongod1和mongod2,端口为:8801,8802。

F:\mongoshard\mongod1\bin\mongod --dbpath=F:\mongoshard\mongod1\bin --port 8801
F:\mongoshard\mongod2\bin\mongod --dbpath=F:\mongoshard\mongod2\bin --port 8802

blob.png

OK搞定,2015年11月11日     === AYUI www.ayjs.net AY 杨洋原创编写,请不要转载谢谢=====

服务配置

先前图中也可以看到,我们client直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将8801,8802的mongod

交给mongos,添加分片也就是addshard()

又要打开了cmd

F:\mongoshard\mongos\bin\mongo 127.0.0.1:8800/admin

blob.png

添加分片服务器mongod1和mongod2

db.runCommand({"addshard":"127.0.0.1:8801",allowLocal:true})
db.runCommand({"addshard":"127.0.0.1:8802",allowLocal:true})

使用allowLocal为true,因为MongoDB尽量避免错误的配置,将集群配置在本地,所以这个配置指明当前仅仅是用于开发

blob.png

这里要注意的是,在addshard中,我们也可以添加副本集,这样能达到更高的稳定性。

查看效果

好了,至此我们的分片操作全部结束,接下来我们通过mongos向mongodb插入10w记录,然后通过printShardingStatus命令

查看mongodb的数据分片情况

db.printShardingStatus()

blob.png

插入10万

var a=[];for(var i=0;i<100000;i++){var ra=parseInt(i*Math.random());a.push({"orderid":"ay"+ra,"number":i});}db.bigData.insert(a);

blob.png

发现发生了个错误,因为我在admin库中操作的。。切换test数据库

use test

blob.png

接下来,查看片上的数据

db.printShardingStatus()

blob.png

这里test的partitioned是false,表示没有分区。。。

我们换另一种插入数据,一条一条插

for(var i=0;i<100000;i++){var ra=parseInt(i*Math.random());db.bigData.insert({"orderid":"ay"+ra,"number":i});}

blob.png

还是没分区,难道要把mongod2  放到其他磁盘上吗?

OK搞定,2015年11月11日     === AYUI www.ayjs.net AY 杨洋原创编写,请不要转载谢谢=====

我剪切mongod2移到D盘上,然后重新启动

D:\mongod2\bin\mongod --dbpath=D:\mongod2\bin --port 8802

blob.png

还是没分区。。。。。。。。。

知道原因了,因为我没有加片键

片已经集群了,但是mongos不知道该如何切分数据,也就是我们先前所说的片键,在mongodb中设置片键要做两步

        ①:开启数据库分片功能,命令很简单 enablesharding(),这里我就开启test数据库。

        ②:指定集合中分片的片键,这里我就指定为bigData.number字段。

切换到admin数据库

use admin
db.runCommand({"enablesharding":"test"})

blob.png

分配片键

db.runCommand({"shardcollection":"test.bigData","key":{"number":1}})

blob.png

报错,因为,片键必须是索引,切换到test库,然后执行

db.bigData.createIndex( { "number" : 1 } )

blob.png

切换admin,执行分配片

blob.png

接下来,查看分片情况

db.printShardingStatus()

blob.png

此时test 的partitioned为true了

继续插入10万条试试,在查看一次

var a=[];for(var i=0;i<100000;i++){var ra=parseInt(i*Math.random());a.push({"orderid":"ay"+ra,"number":i});}db.bigData.insert(a);

blob.png


OK搞定,2015年11月11日     === AYUI       www.ayjs.net      AY         杨洋原创编写,请不要转载谢谢=====




推荐您阅读更多有关于“mongodb,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

抖音号:wpfui,可以看到我的很多作品效果

AYUI8社区版Github地址:前往获取

作者:杨洋(AaronYang简称AY,安徽六安人)目前是个人,还没公司AY唯一QQ:875556003和AY交流

高中学历,2015年1月17日开始,兴趣学习研究WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费.AY主要靠卖技术服务挣钱

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

兼容XP到win10,vs2015/2019,最新AYUI:7.6.5.2

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表