MongoDB基础之十 shared分片
水平分片实例分布图:
mongodb sharding 服务器架构
1. 添加mongdb两个shared实例
- # mkdir -p /home/m17 //home/m18 /home/m20 /home/mlog
- ./bin/mongod --dbpath /home/m17 --logpath /home/mlog/m17.log --fork --port --smallfiles
- ./bin/mongod --dbpath /home/m18 --logpath /home/mlog/m18.log --fork --port --smallfiles
2.配置 configdb
- # ./bin/mongod --dbpath /home/m20 --logpath /home/mlog/m20.log --fork --port --configsvr
3. 配置路由
- # ./bin/mongos --logpath /home/mlog/m30.log --port --configdb 127.0.0.1: --fork
4. 定制分片信息
4.1 连接到 configDB
- # ./bin/mongo --port
- MongoDB shell version: 2.4.
- connecting to: 127.0.0.1:/test
4.2 添加分片实例以及需要分片的表
- mongos> sh.addShard('127.0.0.1:27018')
- { "shardAdded" : "shard0000", "ok" : }
- mongos> sh.addShard('127.0.0.1:27017')
- { "shardAdded" : "shard0001", "ok" : }
- mongos> sh.enableSharding('shop');
- { "ok" : }
- mongos> sh.status();
- --- Sharding Status ---
- sharding version: {
- "_id" : ,
- "version" : ,
- "minCompatibleVersion" : ,
- "currentVersion" : ,
- "clusterId" : ObjectId("5746614b92e27268fdc306b4")
- }
- shards:
- { "_id" : "shard0000", "host" : "127.0.0.1:27018" }
- { "_id" : "shard0001", "host" : "127.0.0.1:27017" }
- databases:
- { "_id" : "admin", "partitioned" : false, "primary" : "config" }
- { "_id" : "test", "partitioned" : false, "primary" : "shard0001" }
- { "_id" : "shop", "partitioned" : true, "primary" : "shard0000" }
4.3 配置表分片(分片键为 goods_id)
- mongos> sh.shardCollection('shop.goods',{goods_id:});
- { "collectionsharded" : "shop.goods", "ok" : }
- mongos> sh.status();
- --- Sharding Status ---
- sharding version: {
- "_id" : ,
- "version" : ,
- "minCompatibleVersion" : ,
- "currentVersion" : ,
- "clusterId" : ObjectId("5746614b92e27268fdc306b4")
- }
- shards:
- { "_id" : "shard0000", "host" : "127.0.0.1:27018" }
- { "_id" : "shard0001", "host" : "127.0.0.1:27017" }
- databases:
- { "_id" : "admin", "partitioned" : false, "primary" : "config" }
- { "_id" : "test", "partitioned" : false, "primary" : "shard0001" }
- { "_id" : "shop", "partitioned" : true, "primary" : "shard0000" }
- shop.goods
- shard key: { "goods_id" : }
- chunks:
- shard0000
- { "goods_id" : { "$minKey" : } } -->> { "goods_id" : { "$maxKey" : } } on : shard0000 Timestamp(, )
- 修改分片大小
- mongos> use config
- switched to db config
- mongos> db.settings.find();
- { "_id" : "chunksize", "value" : }
- mongos> db.settings.save({_id:'chunksize',"value":});
注:
mongodb不是从单篇文档的级别,绝对平均的散落在各个片上, 而是N篇文档,形成一个块"chunk",优先放在某个片上,当这片上的chunk,比另一个片的chunk,区别比较大时, (>=3) ,会把本片上的chunk,移到另一个片上, 以chunk为单位,维护片之间的数据均衡
问: 为什么插入了10万条数据,才2个chunk?
答: 说明chunk比较大(默认是64M)
在config数据库中,修改chunksize的值.
问: 既然优先往某个片上插入,当chunk失衡时,再移动chunk,
自然,随着数据的增多,shard的实例之间,有chunk来回移动的现象,这将带来什么问题?
答: 服务器之间IO的增加,
接上问: 能否我定义一个规则, 某N条数据形成1个块,预告分配M个chunk,
M个chunk预告分配在不同片上.
以后的数据直接入各自预分配好的chunk,不再来回移动?
答: 能, 手动预先分片!
5.预先分片
5.1 以user表为例
- mongos>sh.shardCollection('shop.user',{userid:});
5.2 预先在1K 2K...40K这样的界限切好chunk(虽然chunk是空的), 这些chunk将会均匀移动到各片上
- mongos> for(var i=;i<=;i++) { sh.splitAt('shop.user',{userid:i*}) } .
5.3 查看状态 发现分片已经均匀的分布在两台实例上了
- mongos> sh.status();
- --- Sharding Status ---
- sharding version: {
- "_id" : ,
- "version" : ,
- "minCompatibleVersion" : ,
- "currentVersion" : ,
- "clusterId" : ObjectId("5746614b92e27268fdc306b4")
- }
- shards:
- { "_id" : "shard0000", "host" : "127.0.0.1:27018" }
- { "_id" : "shard0001", "host" : "127.0.0.1:27017" }
- databases:
- { "_id" : "admin", "partitioned" : false, "primary" : "config" }
- { "_id" : "test", "partitioned" : false, "primary" : "shard0001" }
- { "_id" : "shop", "partitioned" : true, "primary" : "shard0000" }
- shop.goods
- shard key: { "goods_id" : }
- chunks:
- shard0000
- { "goods_id" : { "$minKey" : } } -->> { "goods_id" : { "$maxKey" : } } on : shard0000 Timestamp(, )
- shop.user
- shard key: { "userid" : }
- chunks:
- 25 shard0001 20 -- 实例1 20个分片
- 26 shard0000 20 -- 实例2 20个分片
- too many chunks to print, use verbose if you want to force print
5.4 通过mongos添加user数据. 数据会添加到预先分配好的chunk上, chunk就不会来回移动了.
- for(var i=;i<=;i++) {db.user.insert({userid:i,username:'hello world '+i});};
5.5 查看数据分片以及数据分布情况
- --节点1
- > db.user.count();
- --节点2
- > db.user.count();
MongoDB基础之十 shared分片的更多相关文章
- MongoDB基础教程系列--第九篇 MongoDB 分片
1.分片介绍 分片(sharding)是将数据拆分,将其分散存到不同机器上的过程.MongoDB 支持自动分片,可以使数据库架构对应用程序不可见.对于应用程序来说,好像始终在使用一个单机的 Mongo ...
- MongoDB基础教程系列--未完待续
最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...
- MongoDB 基础(2019年开篇)
MongoDB基础知识: 1.什么是MongoDB NoSQL(NoSQL=Not Only SQL),意即"不仅仅是SQL". MongoDB是一个介于关系数据库和非关系数据库之 ...
- MongoDB基础学习
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...
- windows下mongodb基础玩法系列二CURD附加一
windows下mongodb基础玩法系列 windows下mongodb基础玩法系列一介绍与安装 windows下mongodb基础玩法系列二CURD操作(创建.更新.读取和删除) windows下 ...
- MongoDB基础教程系列--目录结构
最近对 MongoDB 产生兴趣,在网上找的大部分都是 2.X 版本,由于 2.X 与 3.X 差别还是很大的,所以自己参考官网,写了本系列.MongoDB 的知识还是很多的,本系列会持续更新,本文作 ...
- Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB
MongoDB 简介 1. 易于使用:没有固定的模式,根据需要添加和删除字段更加容易 2. 易于扩展:MongoDB的设计采用横向扩展.面向文档的数据模型使它能很容易的再多台服务器之间进行分割.自动处 ...
- MongoDB学习【二】—MongoDB基础和数据类型
一.MongoDB基础知识 在MongoDB中相关术语的解释和sql术语对应关系 SQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table col ...
- 常见问题:MongoDB基础知识
常见问题:MongoDB基础知识 ·MongoDB支持哪些平台? ·MongoDB作为托管服务提供吗? ·集合(collection)与表(table)有何不同? ·如何创建数据库(database) ...
随机推荐
- Python核心编程第二版(中文).pdf 目录整理
python核心编程目录 Chapter1:欢迎来到python世界!-页码:7 1.1什么是python 1.2起源 :罗萨姆1989底创建python 1.3特点 1.3.1高级 1.3.2面向 ...
- (三)Jquery Mobile按钮详细讲解
Jquery Mobile按钮详细讲解 一.JM按钮说明 按钮如下图所示 1.HTML5中的button 效果: 2. JM中的普通button ...
- (简单) POJ 2251 Dungeon Master,BFS。
Description You are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is co ...
- Spring学习---JPA配置和使用
理论的东西如果不实践,永远不会变成自己的东西.本文将介绍用maven管理,用Hibernate作为JPA供应商,使用MYSQL数据库,配置和使用JPA. 以下代码已经上传至GITHUB. ...
- jquery 改变变量出现值不同步
出现问题的代码 var unc = 0; $.get( 'index.php', 'data=1', function(res) { unc=1; } ); alert(nuc); 这样的话,不管aj ...
- jQuery扩展两类函数(对象调用,静态调用)
作者:zccst 先看小例子: $(function(){ //扩展方式1-通过对新调用 $.fn.each1=function(){ console.log("hehehehe$.fn.f ...
- 【 bzoj4537】HNOI2016 最小公倍数
首先将边按a的值分组,每$\sqrt{m}$一组. 对于每一组,将符合一组a的询问选出来,将这些询问和这一块之前的边(a一定小于这些询问)按b排序,然后交替插入,询问,对于一个询问,在当前块也有可能有 ...
- ucos任务优先级从64到256,任务就绪表的改变
Ucos在任务调度中经常使用的技术为任务就绪表,在之前的文章中使用的例子是低于64个优先级的任务就绪表查找方法,现在ucos将任务扩展到256优先级之后,任务就绪表的查找也做了一定的修改,今天来讲讲 ...
- mongodb学习(四)CRUD操作
CRUD操作: 1. 插入操作: 直接使用 insert可执行单个操作,也可以执行批量操作 书上的batchInsert会报错.似乎被废弃了. db.foo.insert({"bar&quo ...
- php包管理工具最基本的一些问题
windows下的 1.先安装windows下的set-up程序 点击一步步的, cmd进入,输入composer能成功显示一幅图说明安装成功 2.在下载,https://getcomposer.or ...