分片
- 在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‘})
- 分片的使用,对于客户端是透明的,对数据的读写没有变化
时间: 2024-10-05 04:43:54