分片(增加服务器,水平扩展)是MongoDB的扩展方式,通过分片能过增加更多的机器来应对不断增加的负载和数据,还不影响应用。

【简介】

分片(sharding)是指将数据拆分,将其分散存在不同的机器上的过程。在关系型数据库中,当一个表太大(超过几亿行数据)时,我们也有分表的做法,和这里的分片是类似的概念。

手动分片:当我们应用的瓶颈出现在数据库系统时,如果我们使用的是关系型数据库,我们通常要进行手动分片。即通过我们的应用层代码去维护与若干个数据库系统的连接,并且每个连接都是独立的。我们应用层代码负责屏蔽底层的多个数据库实例,查询时导向到特定的实例上进行,这种方式有个缺点,就是维护起来太麻烦!比如向底层数据库集群添加或删除节点,调整数据分布和负载模式等,都是对我们这层应用层代码提出不小的挑战!

MongoDB从设计时考虑的就是横向扩展,其支持自动分片!我们可以很轻松的向一个MongoDB数据库服务器集群添加或删除机器,集群会自动切分数据、进行负载均衡!

【自动分片】

“片”是一个独立的MongoDB服务(即mongod服务进程,在开发测试环境中)或一个副本集(在生产环境中)。将数据分片,其思想就是将一个大的集合拆成一个一个小的部分,然后放置在不同的“片”上。每一个“片”只是负责总数据的一部分。自动分片就是:应用层根本不知道数据已被分片,也全然不会知道具体哪些数据在哪个特定的“片”上。在MongoDB中,提供了一个路由服务mongos,在分片之前需要先运行这个服务,这个路由服务具体知道数据和“片”的关系。应用程序和这个路由服务通信即可,路由服务会将请求转发给特定的“片”,得到响应后,路由会收集响应数据,返回给应用层程序。下面两幅图展示了不使用分片和使用分片,用户发送请求的处理路径:

分片前:

分片后:

那我们该何时给我们的老系统(上图)改进为分片后的新系统(下图),通常有如下原则:

1》 机器的磁盘不够用了,数据量太大

2》 单个mongod已经无法满足写数据的性能需要了(这里复习一下,如果想要增加读性能,较好的方案是采用搭建主从结构,且让从节点可以响应查询请求)

3》 想将大量的数据放到内存中提高性能,一台机器的内存大小永远有极限(这就是纵向扩展和横向扩展的区别)

【片键】

设置分片时,需要从集合中选取一个键,用该键作为数据拆分的依据。这个键就称为“片键”。我们可以提供一个简单的例子,对于一个存储人员信息的集合users,我们要将其分片,选择的片键是人员姓名name,则最后分片的结果就可能为:第一片中存放的人员名称是A-F开头的,第二片中是G-P开头的,第三篇中是Q-Z开头的。当用户提交的查询是:db.users.find({"name" : "jimmy"}),该查询请求会分配给第二片进行处理;当用户提交的查询是:db.users.find({"name" : {"$lt" : "j"}},则这个查询请求会被分配给第一片和第二片进行处理;当用户提交的查询并不包含片键的信息,则这个查询会被发送到所有片上进行处理。对于插入操作,路由服务会根据插入文档的键name对应的值将这个请求发送到特定片上进行!这就是片键的作用。

随着数据的增减,可能会出现某一片负载很大,另一片负载轻松的情况,对于这种情况,MongoDB也会自动平衡数据和负载,是最后每片的流量基本相同!

对于选择哪个键作为片键?有个原则就是,片键应该有较多变化的值,如果片键设定为性别,只有“男”和“女”两种值,则这个集合就最多被分为两片,如果集合太大,这种分片不会最终解决效率的问题!这里我们可以看出,片键的选择和创建索引时键的选择原则是相似的,实际使用中,通常片键就是创建索引使用的键!

这里先介绍一下分片的简介和原理等内容,下一篇我们会搭建自己的第一个分片出来!

MongoDB:分片(简介 & 自动分片 & 片键)的更多相关文章

  1. Mongodb 笔记07 分片、配置分片、选择片键、分片管理

    分片 1. 分片(sharding)是指将数据拆分,将其分散存放在不同的机器上的过程.有时也用分区(partitioning)来表示这个概念.将数据分散到不同的机器上,不需要功能强大的大型计算机就可以 ...

  2. mongoDB——自动分片(转)

    原文地址:http://www.lanceyan.com/tech/arch/mongodb_shard1.html 在系统早期,数据量还小的时候不会引起太大的问题,但是随着数据量持续增多,后续迟早会 ...

  3. 13.MongoDB系列之分片简介

    1. 分片概念 分片是指跨机器拆分数据的过程,有时也会用术语分区.MongoDB既可以手工分片,也支持自动分片 2. 理解集群组件 分片的目标之一是由多个分片组成的集群对应用程序来说就像是一台服务器. ...

  4. MongoDB 自动分片 auto sharding

    MongoDB部署实验系列文章 MongoDB做为NoSQL数据库,最近几年持续升温,越来越多的企业都开始尝试用MongoDB代替原有Database做一些事情.MongoDB也在集群,分片,复制上也 ...

  5. 转】MongoDB 自动分片 auto sharding

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/4/ 感谢! MongoDB 自动分片 auto shard ...

  6. 测试MongoDB的自动分片

    MongoDB的自动分片: test库分片配置: db.shards.find(){ "_id" : "shard0000", "host" ...

  7. MongoDB集群之分片

    原文:点击打开链接 MongoDB分片 分片(sharding)是将数据拆分,将其分散在不同的机器上的过程.MongoDB支持自动分片 片键(shard key)设置分片时,需要从集合里面选一个键,用 ...

  8. Mongodb主从复制/ 副本集/分片集群介绍

    前面的文章介绍了Mongodb的安装使用,在 MongoDB 中,有两种数据冗余方式,一种 是 Master-Slave 模式(主从复制),一种是 Replica Sets 模式(副本集). Mong ...

  9. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

随机推荐

  1. stm32L011F3——串口实例

    /* STM32L0xx HAL library initialization: - Configure the Flash prefetch, Flash preread and Buffer ca ...

  2. 编辑器sublime(转)摘自网络

    一.下载和安装 Sublime Text2是一款开源的软件,不需要注册即可使用(虽然没有注册会有弹窗,但是基本不影响使用). 下载地址:http://www.sublimetext.com/,请自行根 ...

  3. lfyzoj103 割海成路之日

    问题描述 现在,摆在早苗面前的是一道简单题.只要解决了这道简单题,早苗就可以发动她现人神的能力了: 输出 \[1\ \mathrm{xor}\ 2\ \mathrm{xor} \cdots \math ...

  4. Python第三方库之openpyxl(8)

    Python第三方库之openpyxl(8) 饼图 饼图将数据绘制成一个圆片,每个片代表整体的百分比.切片是按顺时针方向绘制的,0在圆的顶部.饼图只能取一组数据.该图表的标题将默认为该系列的标题. 2 ...

  5. xtu数据结构 C. Ultra-QuickSort

    C. Ultra-QuickSort Time Limit: 7000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java ...

  6. Leetcode 391.完美矩形

    完美矩形 我们有 N 个与坐标轴对齐的矩形, 其中 N > 0, 判断它们是否能精确地覆盖一个矩形区域. 每个矩形用左下角的点和右上角的点的坐标来表示.例如, 一个单位正方形可以表示为 [1,1 ...

  7. zoj 2176 Speed Limit

    Speed Limit Time Limit: 2 Seconds      Memory Limit: 65536 KB Bill and Ted are taking a road trip. B ...

  8. HDU-5317 RGCDQ ,暴力打表!

    RGCDQ 暴力水题,很可惜比赛时没有做出来,理清思路是很简单的. 题意:定义f(i)表示i的素因子个数,给你一段区间[l,r],求max_gcd(f(i),f(j)).具体细节参考题目. 思路:数据 ...

  9. BZOJ3130 [Sdoi2013]费用流 【网络流 + 二分】

    题目 Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络流方案必须满足:(1)每 ...

  10. 小机房的树(codevs 2370)

    题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天,他们想爬到一个节点上去搞基,但是作为两只虫子, ...