#### 如何做好分片集群
* 合理的架构
* 是否需要分片?
* 要分多少片?
* 数据分布规则?
* 正确的姿势
* 选择需要分片的表
* 选择正确的片键
* 使用合适的均衡策略
* 足够的资源
* CPU
* RAM
* 存储
1. 合理的架构-分片大小
* 分片的基本标准:
* 分片的基本标准:
* 关于数据:数据量不超过3TB,尽可能保持在2TB一个片;
* 关于索引:常用索引必须容纳进内存;
- 按照以上初步确定分片后,还要考虑业务压力,随着压力增大,CPU、RAM、磁盘中的任何一项出现瓶颈时,都可以通过添加更多分片来解决。
2. 合理的架构-需要多少个分片
[!qr](./images/0203_t_1.png)
3. 合理的架构-其他需求
*考虑分片的分布:
* 是否需要跨机房分布分片?
* 是否需要容灾?
* 高可用的要求如何?
#### 正取的姿势
各种概念由小到大:
* 片键shard key:文档中的一个字段
* 文档doc:包含shard key的一行数据
* 块Chunk:包含n个文档;
* 分片Shard:包含n个chunk
* 集群Cluster:包含n个分片
[!qr](./images/0203_t_2.png)
5. 正确的姿势-选择合适片键
影响片键效率的主要因素:
* 取值基数(Cardinality)
* 取值分布
* 分散写,集中读
* 被尽可能多的业务场景用到
* 避免单调递增或递减片键
6. 正确的姿势-选择基数大的片键
对于小基数的片键:
* 因为备选值有限,那么块的总数量就有限;
* 随着数据增多,块的大小会越来越大;
* 太大的块,会导致水平扩展时移动块会非常困难。
- 例如:存储一个高中的师生数据,以年龄(假设年龄范围为15~65岁)作为片键,那么:
* 15 <= 年龄 <= 65,且只为整数
* 最多只会有51个chunk
- 结论:取值基数要大!
7. 正确的姿势-选择分布均匀的片键
对于分布不均匀的片键:
* 造成某些块的数据量急剧增大
* 这些块压力随之增大
* 数据均衡以chunk为单位,所以系统无能为力
- 例如:存储一个高中的师生数据,以年龄(假设年龄范围为15~65岁)作为片键,那么:
* 15 <= 年龄 <= 65,且只为整数
* 大部分人的年龄范围为15~18岁(学生)
* 15、16、17、18四个chunk的数据量、访问压力远大于其他chunk
- 结论:取值分布尽可能均匀
8. 正确的姿势-定向性好
考虑:
* 4个分片的集群,你希望读某条特定的数据
* 如果你用片键作为条件查询,mongos可以直接定位到具体的分片
* 如果你不用片键,mongos需要把查询发到4个分片
* 等到最后的一个分片响应,mongos才能响应应用端。
- 结论:对主要查询要具有定向能力
- 一个Email系统的片键例子
```
{
_id: ObjectId(),
user: 123,
time: Date(),
subject: "...",
recipients: [],
body: "...",
attachments: []
}
```
[!qr](./images/0203_t_3.png)
[!qr](./images/0203_t_4.png)
[!qr](./images/0203_t_5.png)
[!qr](./images/0203_t_6.png)

9. 足够的资源
mongos 与 config 通常消耗很少的资源,可以选择低规格的虚拟机;

资源的重点在于shard服务器:
* 需要足以容纳热数据索引的内存;
* 正确创建索引后CPU通常不会成为瓶颈,除非涉及非常多的计算;
* 磁盘精良选用SSD。
最后,实际测试是最好的检验,来看你得资源配置是否完备。

即使项目初期已经具备了足够的资源,任然需要考虑在合适的时候扩展。

建议监控各项资源使用情况,无论哪一项达到60%以上,则开始考虑扩展,因为:

* 扩展需要新的资源,申请新资源需要时间;
* 扩展后数据需要均衡,均衡需要时间。应保证新数据入库速度鳗鱼均衡速度
* 均衡需要资源,如果资源即将或已经耗尽,均衡也是很低效的。

MongoDB分片设计的更多相关文章

  1. MySQL Cluster 与 MongoDB 复制群集分片设计及原理

    分布式数据库计算涉及到分布式事务.数据分布.数据收敛计算等等要求 分布式数据库能实现高安全.高性能.高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Clus ...

  2. MongoDB 分片集群技术

    在了解分片集群之前,务必要先了解复制集技术! 1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这 ...

  3. MongoDB分片(Sharding)技术

    分片(sharding)是MongoDB用来将大型集合分割到不同服务器(或者说一个集群)上所采用的方法.尽管分片起源于关系型数据库分区,但MongoDB分片完全又是另一回事. 和MySQL分区方案相比 ...

  4. 网易云MongoDB分片集群(Sharding)服务已上线

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. MongoDB sharding cluster(分片集群)是MongoDB提供的数据在线水平扩展方案,包括 ...

  5. (转)MongoDB 分片集群技术

    1.1 MongoDB复制集简介 一组Mongodb复制集,就是一组mongod进程,这些进程维护同一个数据集合.复制集提供了数据冗余和高等级的可靠性,这是生产部署的基础. 1.1.1 复制集的目的 ...

  6. MongoDB 分片管理(不定时更新)

    背景: 通过上一篇的 MongoDB 分片的原理.搭建.应用 大致了解了MongoDB分片的安装和一些基本的使用情况,现在来说明下如何管理和优化MongoDB分片的使用. 知识点: 1) 分片的配置和 ...

  7. MongoDB 分片的原理、搭建、应用

    一.概念: 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载.基本思想就是将集合切成小块,这 ...

  8. MongoDB分片简单实例

    分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据也足以提供可接受的读写吞吐量.这时,我 ...

  9. (转)MongoDB分片实战 集群搭建

    环境准备 Linux环境 主机 OS 备注 192.168.32.13 CentOS6.3 64位 普通PC 192.168.71.43 CentOS6.2 64位 服务器,NUMA CPU架构 Mo ...

随机推荐

  1. Java实现邮件收发

    一. 准备工作 1. 传输协议 SMTP协议-->发送邮件: 我们通常把处理用户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器) POP3协议-->接收邮件: 我 ...

  2. @ResponseBody和@RequestBody

    @ResponseBody @ResponseBody的作用其实是将java对象转为json格式的数据. @responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转 ...

  3. 分布式可扩展web体系结构设计实例分析

    Web分布式系统设计准则 下面以一个上传和查询图片的例子来说明分布式web结构的设计考虑和常用的提高性能的方法.该例子提供上传图片和下载图片两个简单功能,并且有一下假设条件?: - 可以存储无上限数量 ...

  4. Linux编译安装、压缩打包、定时任务管理

    编译安装 压缩打包 定时任务管理 一.编译安装 使用源代码,编译打包软件 1.特点 1.可以定制软件 2.按需构建软件 2.编译安装 1.下载源代码包 wget https://nginx.org/d ...

  5. 第四届“传智杯”全国大学生IT技能大赛题解

    目录 A B C D E F G 今年题目难度普遍偏低.只有 D,F 还好. A 按题目给的公式计算即可.注意应在最后的答案中去掉小数部分. B 按照题意模拟即可.注意答案要与 \(0\) 取 \(\ ...

  6. TensorFlow.NET机器学习入门【2】线性回归

    回归分析用于分析输入变量和输出变量之间的一种关系,其中线性回归是最简单的一种. 设: Y=wX+b,现已知一组X(输入)和Y(输出)的值,要求出w和b的值. 举个例子:快年底了,销售部门要发年终奖了, ...

  7. RIP2与OSPFv2 动态路由协议区别

    OSPF五种报文解析 Hello:招呼信息 Route-ID:换回口地址/活动的物理接口最大值 Hello作用: 1. 发现邻居 2. 对一些数据的协商 3. 保持邻居的Keeplive状态.选举DR ...

  8. SpringBoot简单整合分布式任务调度平台(XXL-JOB)

    官方文档:https://www.xuxueli.com/xxl-job/#%E3%80%8A%E5%88%86%E5%B8%83%E5%BC%8F%E4%BB%BB%E5%8A%A1%E8%B0%8 ...

  9. 平衡二叉树(c++实现)续

    !!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist --- 欢迎指正--- 题外话:上一篇关于平衡二叉树文章中,我都没说自己是怎么理解的.别人终 ...

  10. 【LeetCode】829. Consecutive Numbers Sum 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 数学方法 日期 题目地址:https://leetc ...