1. monogDB的分片(Sharding)

分片是mongoDB针对TB级别以上的数据量,采用的一种数据存储方式。

mongoDB采用将集合进行拆分,然后将拆分的数据均摊到几个mongoDB实例上的一种解决方案。

分片模式下,mongoDB实例分为三种:

shards: 存储数据的mongoDB

config: 保存设定的monogDB

routing(mongos): 负责分片处理的mongoDB

2. 配置分片

2.1 试验环境

1 mongos, 1 config, 2 shard

config:  test166:27019
mongos: test166:27020
shards: test166:27017,test167:27017

mongoDB都是单台构成,没有使用副本集

2.2 启动config

在test166上启动config实例,端口27019

# mongod --configsvr --dbpath /var/lib/mongo-c --port 27019

2.3 启动 mongos

在test166上启动routing实例,端口27020

# mongos --configdb test166:27019 --port 27020

2.4 启动 shards

在test166和test167上分别启动shards

# /etc/init.d/mongod start

2.5 添加shards

连接monogs

# mongo --port 27020

添加shards

mongos> use admin
mongos> sh.addShard( "test166:27017" )
mongos> sh.addShard( "test167:27017" )

确认

mongos> db.runCommand({listshards:1})

2.6 开启分片

对指定的库开启sharding

mongos> sh.enableSharding("new")

指定分片的片键

片键有两种模式:hash模式,range模式

2.6.1 使用hash模式分片

mongos> sh.shardCollection( "new.person", { "_id": "hashed" } )

插入数据确认

mongos> use new
mongos> for(var i=0;i<10;i++){db.person.insert({name:"bluejoe"+i});}

使用hash模式,记录在各片上的分布比较平均

2.6.2 使用range模式分片

mongos> sh.shardCollection( "new.person2", { "name": 1 } )

插入数据确认

mongos> use new
mongos> for(var i=0;i<100;i++){db.person2.insert({name:"jack"+i});}

2.7 确认分片情况

mongos> sh.status()
或
mongos> db.printShardingStatus()

在各shard上确认数据分布情况(hash模式)

> use new
> db.person.find()

test166:27017上的数据分布情况

test167:27017上的数据分布情况

2.8 其他

要分片的库原来有数据的情况下,先建index,然后再指定片键

mongos> sh.enableSharding("new2")
mongos> use new2
mongos> db.user2.createIndex( { "username": 1 } )
mongos> sh.shardCollection( "new2.user2", { "username": 1 } )

3. 后记

本次测试环境使用mongoDB单台构成,没有使用副本集,使用副本集时的分片配置和上面类似,在此不详述。

mongoDB系列之(三):mongoDB 分片的更多相关文章

  1. Mongodb系列:初识Mongodb

    一.背景: 月初进行了期末考试非常荣幸可以參加到了考试系统维护中(详情请阅读:<那些年我们一起參加的活动:15年上半年考试系统维护总结>)!主要负责server维护,在维护期间对Mongo ...

  2. MongoDB系列:把mongodb作为windows的服务来启动

    1.首先切换到mongodb安装目录下的bin目录,在控制台直接运行以下命令 "C:\Program Files\MongoDB\Server\3.0\bin\mongod.exe" ...

  3. MongoDB系列:三、springboot整合mongoDB的简单demo

    在上篇 MongoDB常用操作练习 中,我们在命令提示符窗口使用简单的mongdb的方法操作数据库,实现增删改查及其他的功能.在本篇中,我们将mongodb与spring boot进行整合,也就是在j ...

  4. MongoDB系列(三):增删改查(CURD)

    上篇讲了MongoDB的基础知识,大家应该对MongoDB有所了解了,当然真正用的还是curd操作,本篇为大家讲解MongoDB的curd操作. 1.数据库操作 #.增 use config #如果数 ...

  5. MongoDB系列—— Window 搭建Mongodb 集群

    Mongodb的集群方式的搭建有三种:Replica Set / Sharding / Master-Slaver.这里只说明最简单的集群搭建方式(Replica Set) Replica Set M ...

  6. Mongodb学习笔记三(Mongodb索引操作及性能测试)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  7. MongoDB系列一:MongoDB文档型数据库特点介绍

    一.MongoDB数据库的存储特点: 1.MongoDB是文档型数据库,存储的是文档(将json二进制化为Bson存储): 2.存储的每篇文档都可以有自己独特的存储结构,颠覆了传统数据库必须按照表和列 ...

  8. MongoDB系列[2]:MongoDB导入导出以及数据库备份

    PS: 以下所有操作都是基于MongoDB自带的工具进行的,所以操作时一定要手动切换到Mongodb的bin目录下面,并且使用管理员权限运行命令 导出工具 mongoexport 概念: mongoD ...

  9. MongoDB系列二:MongoDB安装过程

    一.MongoDB安装,以Linux系统安装为例:(下载:www.mongodb.org 注意使用stable版本) 1.下载最新版本的MongoDB安装包,wget http://fastdl.mo ...

  10. MongoDB学习记录(三) - MongoDB的"增查改删"操作之"查"

    查找使用的方法: db.collection.find() 查找所有文档 db.collection.find({})或者db.collection.find({}) 指定键值对 db.collect ...

随机推荐

  1. GO里的“指针”

    指针 *T即为类型T的指针 &t即为获取变量t的地址 *p即为获取指针变量所指向的内容 var p *int 指针的*在左边  类型在右边.这里的 *int就是一个指针类型. 跟int str ...

  2. python并行计算(持续更新)

    工作中需要对tensorflow 的一个predict结果加速,利用python中的线程池 def getPPLs(tester,datas): for line in datas: tester(l ...

  3. 学习总结——JMeter做http接口功能测试

    JMeter对各种类型接口的测试 默认做接口测试前,已经给出明确的接口文档(如,http://test.nnzhp.cn/wiki/index.php?doc-view-59):本地配好了JMeter ...

  4. phpStudy配置https

    phpStudy配置https 1.打开vhosts-conf配置文件 2.在配置文件中增加如下内容 server { listen 443; server_name tam.gogugong.com ...

  5. Luogu P1535 【游荡的奶牛】

    搜索不知道为什么没有人写bfs觉得挺像是标准个bfs的 状态因为要统计次数,不能简单地跳过一个被经过的点这样的话,状态量会爆炸采用记忆化设dp[i][j][k]表示在第k分钟到达点(i,j)的方案数以 ...

  6. Kubernetes之YAML文件

    一.YAML 基础 YAML是专门用来写配置文件的语言,非常简洁和强大,使用比json更方便.它实质上是一种通用的数据串行化格式.后文会说明定义YAML文件创建Pod和创建Deployment. YA ...

  7. Effective STL 学习笔记: Item 22 ~ 24

    Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...

  8. linux c获取本地时间

    在标准C/C++中,我们可通过tm结构来获得日期和时间,tm结构在time.h中的定义如下: #ifndef _TM_DEFINED struct tm { int tm_sec; /* 秒–取值区间 ...

  9. 一步一步学习IdentityServer4 (1) 概要配置说明

    //结合EFCore生成IdentityServer4数据库 // 项目工程文件最后添加 <ItemGroup><DotNetCliToolReference Include=&qu ...

  10. Pytest里,mark装饰器的使用,双引号,没引号,这种差别很重要

    按最新版的pytest测试框架. 如果只是单一的mark,不要加任何引号. 如果是要作and ,not之类的先把,一定要是双引号! 这个要记清楚,好像和以前版本的书上介绍的不一样,切记! import ...