MongoDB分片
来源:互联网 发布:淘宝改类目影响排名吗 编辑:程序博客网 时间:2024/05/16 17:38
前面学的主从复制,副本集都是解决安全性问题的。现在学习的分片,是解决性能上问题的。在下面三种情况下,我们需要考虑用分片:
1、机器的磁盘空间不足
2、单个的mongoDB服务器已经不能满足大量的插入操作
3、想通过把大数据放到内存中来提高性能
目前就我的理解来看,分片的功能就是把某个或几个数据库数据,拆分的放到多个分片数据库上。它们一个最简单的构成是,1台路由服务器,1台配置服务器,2台分片服务器。我们实际上操作的是路由服务器,路由服务器通过配置服务器来存取数据。下面来演示一下:
配置服务器.conf
dbpath = D:\MongoDB\8888\config
port = 2000
bind_ip = 127.0.0.1
配置服务器.bat
mongod --config 配置服务器.conf
路由服务器.bat
mongos --port 1000 --configdb 127.0.0.1:2000 -------------------------注意,configdb是指向的配置服务器端口
路由服务器客户端.bat
mongo 127.0.0.1:1000/admin
分片1.conf
dbpath = D:\MongoDB\8888\0801
port = 8081
bind_ip = 127.0.0.1
分片1.bat
mongod --config 分片1.conf
分片1client.bat
mongo 127.0.0.1:8081/admin
分片2.conf
dbpath = D:\MongoDB\8888\0802
port = 8082
bind_ip = 127.0.0.1
分片2.bat
mongod --config 分片2.conf
分片2client.bat
mongo 127.0.0.1:8082/admin
1、依次打开配置服务器---->路由服务器------->分片1---------->分片2 (注意,实际应用时conf文件不要用中文打不开)
2、进到路由服务器中,执行 ------------------------操作这句之前,不可操作数据库
connecting to: 127.0.0.1:1000/adminmongos> db.runCommand({addshard:"127.0.0.1:8081",allowLocal:true}){ "shardAdded" : "shard0000", "ok" : 1 }mongos> db.runCommand({addshard:"127.0.0.1:8082",allowLocal:true}){ "shardAdded" : "shard0001", "ok" : 1 }mongos>3、开数据分片功能,为数据库foobar打开分片功能,在这之前,我都还没有建foobar数据库,但是没有关系,还是会执行成功
mongos> db.runCommand({"enablesharding":"foobar"}){ "ok" : 1 }mongos>
4、建立foobar数据库,并在其内增加一个集合bar
mongos> use foobarswitched to db foobarmongos> db.bar.insert({name:1})WriteResult({ "nInserted" : 1 })mongos>
5、对bar集合进行分片 --------------------这里得回到admin下操作才成功
mongos> use adminswitched to db adminmongos> db.runCommand({"shardcollection":"foobar.bar","key":{"_id":1}}){ "collectionsharded" : "foobar.bar", "ok" : 1 }
6、插入大数据(1000000条),路由服务器执行,对数据库的操作都在路由服务器上执行
mongos> function add(){... var i = 0;... for(;i<200000;i++){... db.bar.insert({"age":i+10,"name":"jim"})... }... }mongos> add()mongos>
7、在路由服务器上查询插入数据量
mongos> db.bar.find().count()1000001mongos>
8、在分片1上查询插入的数据量
> db.bar.find().count()369808>
9、在分片2上查询插入的数据量
> db.bar.find().count()630193>
分片成功。
10、在配置服务器上查看分片情况
> db.printShardingStatus()--- Sharding Status --- sharding version: { "_id" : 1, "minCompatibleVersion" : 5, "currentVersion" : 6, "clusterId" : ObjectId("57820af96aeb53c848d4a707")} shards: { "_id" : "shard0000", "host" : "127.0.0.1:8081" } { "_id" : "shard0001", "host" : "127.0.0.1:8082" } active mongoses: "3.2.7" : 1 balancer: Currently enabled: yes Currently running: no Failed balancer rounds in last 5 attempts: 0 Migration Results for the last 24 hours: 3 : Success databases: { "_id" : "foobar", "primary" : "shard0000", "partitioned" : true } foobar.bar shard key: { "_id" : 1 } unique: false balancing: true chunks: shard0000 4 shard0001 3 { "_id" : { "$minKey" : 1 } } -->> { "_id" : ObjectId("7820e334ed6e8367928b1da") } on : shard0000 Timestamp(4, 1) { "_id" : ObjectId("57820e334ed6e8367928b1da") } -->> {"_id" : ObjectId("57820e334ed6e8367928b1ee") } on : shard0000 Timestamp(1, 2) { "_id" : ObjectId("57820e334ed6e8367928b1ee") } -->> {"_id" : ObjectId("57820e994ed6e836792b4eaa") } on : shard0001 Timestamp(3, 1) { "_id" : ObjectId("57820e994ed6e836792b4eaa") } -->> {"_id" : ObjectId("57820f2e4ed6e836792e5669") } on : shard0001 Timestamp(2, 3) { "_id" : ObjectId("57820f2e4ed6e836792e5669") } -->> {"_id" : ObjectId("57820fc64ed6e83679310113") } on : shard0000 Timestamp(3, 2) { "_id" : ObjectId("57820fc64ed6e83679310113") } -->> {"_id" : ObjectId("5782106c4ed6e8367933fae4") } on : shard0000 Timestamp(3, 3) { "_id" : ObjectId("5782106c4ed6e8367933fae4") } -->> {"_id" : { "$maxKey" : 1 } } on : shard0001 Timestamp(4, 0)>
10、在配置服务器上查看自动分片机制配置信息
> show dbsconfig 0.001GBlocal 0.000GB> use configswitched to db config> show collectionschangelogchunkscollectionsdatabaseslockpingslocksmongossettingsshardstagsversion> db.shards.find(){ "_id" : "shard0000", "host" : "127.0.0.1:8081" }{ "_id" : "shard0001", "host" : "127.0.0.1:8082" }> db.mongos.find(){ "_id" : "USER-20160220HU:1000", "ping" : ISODate("2016-07-10T09:28:23.282Z"),"up" : NumberLong(2616), "waiting" : true, "mongoVersion" : "3.2.7" }
- MongoDB 分片
- mongodb 分片
- mongodb分片
- Mongodb分片
- Mongodb分片
- MongoDB 分片
- MongoDB分片
- MongoDB分片
- mongodb分片
- mongodb分片
- MongoDB分片
- mongodb分片
- MongoDB分片
- mongodb分片
- MongoDB 分片
- MongoDB分片
- MongoDB 分片
- MongoDB 分片
- HDU 1423 (最长上升公共子序列)
- [译]开/闭原则在Android中的实践
- Mybatis中oracle、mysql、db2、sql server的like模糊查询
- /etc/profile和~/.bash_profile等文件的区别和联系
- nyoj 260 数数小木块
- MongoDB分片
- java画图面板
- Qt经典—线程、事件与Qobject
- Unity的拍照功能
- LeetCode 371. Sum of Two Integers
- 用钩子机制实现键盘监听---键盘监听器
- JavaEE学习笔记之Servlet/JSP(5)
- 【Python学习笔记】python高级特性:切片
- 【训练题】强连通分量缩点