Mongodb数据分片的实现
转载自 http://www.cnblogs.com/spnt/
副本集实现了网站的安全备份和故障的无缝转移,但是并不能实现数据的大容量存储,毕竟物理硬件是有极限的,这个时候就需要做分布式部署,把数据保存到其他机器上。Mongodb的分片技术就很完美的实现了这个需求。
理解Mongodb的分片技术即Sharding架构
什么是Sharding?说白了就是把海量数据水平扩展的集群系统,数据分表存储在Sharding的各个节点上。
Mongodb的数据分开分为chunk,每个chunk都是collection中的一段连续的数据记录,一般为200MB,超出则生成新的数据块。
构建Sharding需要三种角色,
shard服务器(Shard Server):Shard服务器是存储实际数据的分片,每个Shard可以是一个mongod实例,也可以是一组mongod实例构成的Replica Sets,为了实现每个Shard内部的故障自动切换,MongoDB官方建议每个Shard为一组Replica Sets。
配置服务器(Config Server):为了将一个特定的collection存储在多个Shard中,需要为该collection指定一个Shard key,决定该条记录属于那个chunk,配置服务器可以存储以下信息:
1,所有Shard节点的配置信息
2,每个chunk的Shard key范围
3,chunk在各Shard的分布情况
4,集群中所有DB和collection的Shard配置信息
路由进程(Route Process):一个前端路由,客户端由此接入,首先询问配置服务器需要到那个Shard上查询或保存记录,然后连接相应Shard执行操作,最后将结果返回客户端。客户端只需 将原本发给mongod的查询活更新请求原封不动的发给路由器进程,而不必关心所操作的记录存储在那个Shard上。
构建Sharding
由上面分析可得出,构建一个Sharding至少需要4个mongodb进程,两个Shard Server(做分片),一个Config Server,一个Route Process,然后安排如下
进程 端口 文件目录
Shard Server1 2000 mongodb5
Shard Server2 2001 mongodb6
Config Server 30000 mongodb7
Route Process 40000 mongodb8
现在开始配置:
1,启动Shard Server
这里启动只多了一个命令:shardsvr,用这个命令就表示这个进程是Shard进程。
2,启动Config Server
启动Config Server用的是configsvr命令
3,启动Route Process
这里设置chunk大小为1M,方便测试分片效果
4,配置Sharding
所有进程都启动好以后,剩余的就是把他们串成串儿了
新开个cmd,然后连接到路由器进程中,使用addshard添加到路由器中
通过上面两次操作,整个架构已经串成了一串,但是,别着急,架构还不知道分片的数据库和片键呢
指定分片的数据库是Friends,然后指定按照表FriendUserAttach中的_id分片。
至此整个系统配置完毕。
验证分片情况,我是用程序插入的数据,因为表是我实际所用的表,在cmd里插入就太麻烦了,这里我用客户端驱动插入10000条数据
用use命令切换到Friends数据库,然后stats查看当前状态
字段说明:sharded为true,说明此表是经过分片处理的
shards部分有两个Shard Server分别是:"shard0000" 和 "shard0001"。"shard0000"的字段count为1016,表明此Shard Server上分布的数据量是1016条,size表示此Shard Server上分布的数据库大小,单位为b。
转载于:https://www.cnblogs.com/chenying99/archive/2012/12/23/2830346.html
Mongodb数据分片的实现相关推荐
- mongodb数据合并设计_「时间序列数据」和MongoDB(二)-模式设计最佳实践
在上一篇博客文章时间序列数据与MongoDB:第一部分-简介中,我们介绍了时间序列数据的概念,然后介绍了一些可以用于帮助收集时间序列应用程序需求的发现问题.对这些问题的回答有助于指导支持大容量生产应用 ...
- MongoDB Sharding分片配置
Ps:mongod是mongodb实例,mongos被默认为为mongodb sharding的路由实例. 本文使用的mongodb版本为3.2.9,因此参考网址为:https://docs.mong ...
- DBA(五):数据分片、Mycat服务
数据分片概述 分库/分表 什么是分库分表? 将存放在一台数据库服务器中的数据,按照特定的方式进行拆分,分散存储到多台数据库服务器中,以达到分散单台服务器负载的效果 水平分割 横向切分 按照表中指定字段 ...
- 8天学通MongoDB——第六天 分片技术
在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存 就吃不消了,针对这样的场景我们该如何应对. 一:分片 mong ...
- MongoDB数据量大于2亿后遇到的问题 及原因分析
MongoDB数据量大于2亿后遇到的问题 及原因分析 一.数据增长情况 每月增长量最大达到了1.9亿,每天增长约300W-500W (增长数据具体可看页尾) 二.遇到的情况及解决方法 1.数据 ...
- MongoDB数据建模介绍
MongoDB数据建模介绍 数据建模需要在满足应用需求.数据库引擎的性能特征.以及数据检索模式之间取得平衡.在设计数据模型时,请始终考虑应用程序对数据的使用场景(比如,查询,更新,和数据处理)以及数据 ...
- SpringCloud学习笔记017---分布式之数据分片处理
三种数据分片方式 hash方式: 一致性hash range based 小结: 分片特征值的选择 以MongoDB sharding key为例 元数据服务器 HDFS元数据 MongoDB元数据 ...
- MongoDB 的分片技术
2019独角兽企业重金招聘Python工程师标准>>> 在MongoDB中分片技术 也就是集群.需要1台配置服务器配置各个节点的配置信息,1台路由服务器来知道每一台节点都在哪个地方并 ...
- 2021-05-12 MongoDB面试题 什么情况下需要用到MongoDB的分片
什么情况下需要用到MongoDB的分片? 1)机器的磁盘不够用了.使用分片解决磁盘空间的问题. 2)单个mongod已经不能满足写数据的性能要求.通过分片让写压力分散到各个分片上面,使用分片服务器自身 ...
最新文章
- 整理:各个浏览器及web服务器对URL(get)长度的限制
- 图解Telnet命令和命令行看邮件
- mysql主键查询gap锁失效,mysql记录锁(record lock),间隙锁(gap lock),Next-key锁(Next-key lock)...
- 十八种方法让你集中精力工作
- Debian Squeeze AMD64安装Oracle 10g x86_64 10.2.0....
- ​​使用win7超级终端连接华为交换机并配置端口镜像
- LeetCode 609. 在系统中查找重复文件(哈希)
- JAVA中for循环写杨辉三角_java使用for循环输出杨辉三角
- 图像处理-STB图片读写
- 数据结构上机实践第11周项目1 - 图基本算法库
- 属性子集选择的基本启发方法_2017.06.29数据挖掘基础概念第二.三章
- 帆软认证报表工程师FCRA试题
- TranslateAnimation详解
- mysql io瓶颈_服务器IO瓶颈对MySQL性能的影响
- PCA(主成分分析)数学原理推导证明
- 农村有人收旧房梁,一根100多,破木头有啥用?
- 游戏排行榜实现mysql_游戏中百万用户排行设计与实现
- 在云端管理您的所有身份(AAD)-第一部分
- 不错的大数据课程体系(感谢某机构,希望不属于侵权)
- MyBatis源码简单分析
热门文章
- python爬虫百科-Python爬虫之requests库介绍(一)
- cmd查看python版本-在cmd中查看python的安装路径方法
- python界面颜色-给Python点颜色——青少年学编程
- 编程语言python特点-Python语言的特点有哪些?九大特点介绍!
- python和java哪个-Python和Java到底哪个更好?
- python基本语法规则-python基础知识——基本语法
- python菜鸟教程函数-Python 函数装饰器
- python的用途实例-Python实例方法、类方法、静态方法的区别与作用详解
- python运行慢-提高python运行速度的几个技巧
- python中文昵称-python实例pyspark以及python中文显示