您的位置:首页 > 数据库 > Mongodb

mongodb 集群分片

2017-07-27 17:01 375 查看

分片

在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求

当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量,这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据

为什么使用分片

本地磁盘不够大

当请求量巨大时会出现内存不足。

垂直扩展价格昂贵(内存、磁盘、cpu)

实现分片

分片结构图如下:

实现分片需要3部分:

路由服务器mongos:客户端由此接入,根据分片依据,将数据写入到不同的数据服务器

配置服务器mongod:将数据进行分片的依据

数据服务器mongod:可以有多台物理机,用于存储实际的数据块

设计端口如下:

路由服务器:60001

配置服务器:60002

数据服务器1:60003

数据服务器2:60004

step1:启动数据服务器,当前位于Desktop目录下

sudo mkdir t1
sudo mkdir t2
sudo mongod --port 60003 --dbpath=~/Desktop/t1
sudo mongod --port 60004 --dbpath=~/Desktop/t2


step2:启动配置服务器

sudo mkdir conf
sudo mongod --port 60002 --dbpath=~/Desktop/conf


step3:启动路由服务器

sudo mongos --port 60001 --configdb 192.168.196.128:60002


step4:在路由服务器中添加数据服务器

mongo --port 60001
use admin
db.runCommand({addshard:'192.168.196.128:60003'})
db.runCommand({addshard:'192.168.196.128:60004'})


step5:对数据库test1启用分片

db.runCommand({enablesharding:'test1'})


step6:指定片键,即集合中文档的分片依据

db.runCommand({shardcollection:'test1.t1',key:{name:1}})


step7:测试数据,向集合中插入1W条数据

for(i=0;i<10000;i++){
db.t1.insert({name:'abc'+i})
}


step8:查看数据存储情况

db.printShardingStatus()


可以查看到数据均匀存储在了数据服务器上

step9:查询数据

db.t1.find({name:'abc1000'})
db.t1.find({name:'abc9000'})


分片的使用,对于客户端是透明的,对数据的读写没有变化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: