#### 如何做好分片集群
* 合理的架构
* 是否需要分片?
* 要分多少片?
* 数据分布规则?
* 正确的姿势
* 选择需要分片的表
* 选择正确的片键
* 使用合适的均衡策略
* 足够的资源
* 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. Camera、音频录制与Vitamio框架

    一.Camera 1.概述 Android框架包含了各种相机哥相机功能的支持,是你可以在应用中捕获图像和视频. 在应用能使用设备上的相机之前,先想一想将来会如何使用此硬件: (1)Camera  应该 ...

  2. 监测linux系统负载与CPU、内存、硬盘、用户数的shell脚本

    本节主要内容: 利用Shell脚本来监控Linux系统的负载.CPU.内存.硬盘.用户登录数. 一.linux系统告警邮件脚本 # vim /scripts/sys-warning.sh #!/bin ...

  3. HUD总结

    HUD 指示器/HUD/遮盖/蒙板 半透明的指示器如何实现 指示器的alpha = 1.0; 指示器的背景色是半透明的 1. 创建颜色 直接创建对应的颜色 + (UIColor *)blackColo ...

  4. 通过jquery实现form表单提交后不跳转页面,保留当前页面

    jquery代码: <script type="text/javascript" src="../js/jquery-1.8.3.min.js">& ...

  5. 跨平台调用之WebService

    一.简介 web service是一种跨编程语言和跨操作系统平台的远程调用技术,是基于网络的.分布式的模块化组件. 跨编程语言就是说服务器端程序采用 Java 编写,客户端程序则可以采用其他编程语言编 ...

  6. 如何查看Python的安装路径

    一.如何查看Python的安装路径 win+r输入cmd在输入:where python回车

  7. 从离线分析建模到稳健风控升级,为什么说顶象Dinsight实时风控引擎是对的选择?

    随着金融业数字化程度进一步加深,互联网垂直电商.消费金融等领域与人们生活的深度融合,数字科技在安全风险控制上已经成为了重要的基石.如何主动防范化解风险,建立智能化的实时风险监测预警体系,加速业务模式转 ...

  8. 『学了就忘』Linux系统管理 — 85、工作管理相关命令

    目录 1.工作管理简介 2.如何把命令放入后台 3.后台管理命令 (1)查看后台的工作 (2)将后台暂停的工作恢复到前台执行 (3)把后台暂停的工作恢复到后台执行 4.后台命令脱离登录终端运行 1.工 ...

  9. 小迪安全 Web安全 基础入门 - 第八天 - 信息打点-系统篇&端口扫描&CDN服务&负载均衡&WAF防火墙

    一.获取网络信息-服务厂商&网络架构 1.通过whois查询获取. 2.nmap.goby等扫描工具扫描获取. 3.https://www.netcraft.com/等网站查询获取. 二.服务 ...

  10. SpringMVC编程:初始化项目部署后,主页404代码问题解决

    SpringMVC 主页404问题 初始化项目后,Tomcat服务器显示404报错问题! 问题解决的原因是:项目依赖的jar包没有随着项目一块打包部署在Tomcat服务器上面,即缺少项目lib依赖. ...