分片
在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。
当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。
分片的必要性
机器的磁盘空间不足
单个的mongoDB服务器已经不能满足大量的插入操作
想通过把大数据放到内存中来提高性能
结构图
- Shard:
用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
- 配置服务器:
mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
- 路由:
前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
分片的步骤
1、创建一个配置服务器
配置服务器.conf
dbpath = D:\software\MongoDBDATA\08\config
port = 2000
bind_ip = 127.0.0.1
配置服务器.bat
mongod --config 配置服务器.conf
2、创建路由服务器,并且连接配置服务器
路由器.bat
mongos --port 1000 --configdb 127.0.0.1:2000
路由器_1000.bat
mongo 127.0.0.1:1000/admin
3、添加2个分片数据库8081和8082
8081
分片数据库_01.conf
dbpath = D:\software\MongoDBDATA\08\0801
port = 8081
bind_ip = 127.0.0.1
分片数据库_01.bat
mongod --config 分片数据库_01.conf
分片数据库_01_8081.conf
mongo 127.0.0.1:8081/admin
8082
分片数据库_02.conf
dbpath = D:\software\MongoDBDATA\08\0802
port = 8082
bind_ip = 127.0.0.1
分片数据库_02.bat
mongod --config 分片数据库_02.conf
分片数据库_02_8082.conf
mongo 127.0.0.1:8082/admin
4、利用路由为集群添加分片(允许本地访问)
db.runCommand({addshard:"127.0.0.1:8081",allowLocal:true})
db.runCommand({addshard:"127.0.0.1:8081",allowLocal:true})
切记之前不能使用任何数据库语句
5、打开数据分片功能,为数据库foobar打开分片功能
db.runCommand({"enablesharding":"foobar"})
6、对集合进行分片
db.runCommand({"shardcollection":"foobar.bar","key":{"_id":1}})
7、利用大数据量进行测试 (800000条)
8、查看配置库对于分片服务器的配置存储
db.printShardingStatus()
9、查看集群对bar的自动分片机制配置信息
mongos> db.shards.find()
{ "_id" : "shard0000", "host" : "127.0.0.1:8081" }
{ "_id" : "shard0001", "host" : "127.0.0.1:8082" }