技术分享——mongodb(2)
来源:互联网 发布:什么软件可以写日记 编辑:程序博客网 时间:2024/05/17 13:41
来填坑了!
ps.本次分享整理自imooc,菜鸟教程和无限百度
这次想说的是分片
定义:将数据进行拆分,按数据水平分散到不用的服务器上
为什么要分片:改善单台机器数据的存储及数据吞吐性能,提高在大数据下随机访问的性能
什么时候用分片:
1.硬件、部署瓶颈
2.性能
和复制集对比:
节点成员介绍:
1.Shard节点:存储数据的节点(单个mongod或者复制集)
2.Config server:存储元数据,为mongos服务,将数据路由到shard
3.Mongos:接入前端请求,进行对应消息路由
三者之间的关联
成员节点启动参数:
1.shard节点:
(1)mongod --shardsvr
(2)mongod --shardsvr --rpelSet(副本集)
2.config server:mongod --configsvr
3.mongos --configdb<configdb server>
Mongo分片实战
1.准备材料
(1)一堆conf
(1)三个shard节点(28010~28012.conf)
(2)一个config节点用(28013.conf)
(3)一个mongos节点(28014.conf)
2.开启节点
(1)开启shard节点
sudo mongod -f /var/lib/mongodb/conf/28010.conf
sudo mongod -f /var/lib/mongodb/conf/28011.conf
sudo mongod -f /var/lib/mongodb/conf/28012.conf
(2)开启config节点
sudo mongod -f /var/lib/mongodb/conf/28013.conf
(3)开启mongos节点
sudo mongos -f /var/lib/mongodb/conf/28014.conf
3.进入mongos节点
sudo mongo 192.168.74.138:28014
4.添加分片
use admin
db.runCommand({addshard:”192.168.74.138:28010”});
db.runCommand({addshard:”192.168.74.138:28011”});
db.runCommand({addshard:”192.168.74.138:28012”});
5.指定要分片的数据库
db.runCommand({enablesharding:”test”})
6.指定要分片的集合和指定分片片键
db.runCommand({ shardcollection: "test.user_id", key: {“user_id”:1}})
7.插入数据
use shardtest
For(var i=1;i<1000000;i++){db.userid.insert({“user_id”:i})}
8.查看分片状态
db.printShardingStatus()
可以看到在三个分片里面都插入了数据
#success
分片片键:集合里面选一个键,用该键的值作为数据拆分的依据
Chunk:mongodb分片后,存储数据的单元块,默认64M,超过最大值后拆分并且拆分信息保存到config服务器
哈希分片:能让数据分布更加均衡
Eg.
//插入数据
Use shardtest
Db.userid_hash.insert({“user_id”:11})
Db.userid_hash.insert({“user_id”:22})
//为userid_hash集合设置哈希分片
Use admin
//写入测试数据
for(i=0;i<100000;i++){db.userid_hash.insert({"user_id":i})}
//查看状态
db.userid_hash.stats()
{"sharded" : true,"ns" : "shardtest.userid_hash","count" : 100000,"numExtents" : 15,"size" : 4000048,"storageSize" : 8380416,"totalIndexSize" : 8086064,"indexSizes" : {"_id_" : 3262224,"user_id_hashed" : 4823840},"avgObjSize" : 40.00048,"nindexes" : 2,"nchunks" : 6,"shards" : {"shard0000" : {"ns" : "shardtest.userid_hash","count" : 33755,"size" : 1350216,"avgObjSize" : 40.00047400385128,"storageSize" : 2793472,"numExtents" : 5,"nindexes" : 2,"lastExtentSize" : 2097152,"paddingFactor" : 1,"systemFlags" : 1,"userFlags" : 0,"totalIndexSize" : 2755312,"indexSizes" : {"_id_" : 1103760,"user_id_hashed" : 1651552},"ok" : 1},"shard0001" : {"ns" : "shardtest.userid_hash","count" : 33142,"size" : 1325696,"avgObjSize" : 40.00048277110615,"storageSize" : 2793472,"numExtents" : 5,"nindexes" : 2,"lastExtentSize" : 2097152,"paddingFactor" : 1,"systemFlags" : 1,"userFlags" : 0,"totalIndexSize" : 2681728,"indexSizes" : {"_id_" : 1079232,"user_id_hashed" : 1602496},"ok" : 1},"shard0002" : {"ns" : "shardtest.userid_hash","count" : 33103,"size" : 1324136,"avgObjSize" : 40.00048333987856,"storageSize" : 2793472,"numExtents" : 5,"nindexes" : 2,"lastExtentSize" : 2097152,"paddingFactor" : 1,"systemFlags" : 1,"userFlags" : 0,"totalIndexSize" : 2649024,"indexSizes" : {"_id_" : 1079232,"user_id_hashed" : 1569792},"ok" : 1}},"ok" : 1}
可以看到三个成员的数据分布比较均衡
如何选择合适的片键:
(1)数据块大小(避免选择重复量大的key当作片键,避免按照片键分出来的数据块大小不均衡)
(2)数据写均匀分布(避免选择单调递增的key当作片键,因为这样会导致写操作都在最后一个副本集中添加数据,例如_id和时间,可以考虑用哈希分片)
讲完!溜了溜了。。。
- 技术分享——mongodb(2)
- 技术分享——mongodb入门(1)
- MongoDB— 分片技术
- MongoDB—分片技术
- MongoDB技术——基本概念(一)
- MongoDB技术——基本概念(二)
- MongoDB——分片技术
- MongoDB—运维技术
- MongoDB—运维技术
- 网页分享技术—对网页分享技术的思考
- MongoDB——第六天 分片技术
- MongoDB——运维技术
- MongoDB——第六天 分片技术
- 3D打印前沿进展与技术分享—— 2016 RSNA 收获分享(上)
- 分针网——每日分享:Mongodb 的基本操作
- 分针网—每日分享:Node.js操作mongodb数据库
- VR开发——Unity动画系统2(V客it学院技术分享)
- 挖挖双色球——数据挖掘技术 分享
- HDU 1061 Rightmost Digit
- loadrunner Web_类函数之web_reg_find()
- SDUT-3362 数据结构实验之图论六:村村通公路
- 单调栈
- 如何理解设备树中address-cells和size-cells
- 技术分享——mongodb(2)
- 超全数据挖掘面试笔试题(附答案)
- hdu6206—Apple(计算几何+高精度)
- 2018网易秋招--合唱
- 迷宫问题 poj3984
- 遍历Map集合的四种方法
- Java爬虫,信息抓取的实现
- hive2版本安装
- HDOJ 3790-最短路径问题