#### 如何做好分片集群
* 合理的架构
* 是否需要分片?
* 要分多少片?
* 数据分布规则?
* 正确的姿势
* 选择需要分片的表
* 选择正确的片键
* 使用合适的均衡策略
* 足够的资源
* 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. Linux 下使用rtcwake实现定时休眠和唤醒设备

    查看是否安装rtcwake whereis rtcwake rtcwake: /usr/sbin/rtcwake /usr/share/man/man8/rtcwake.8.gz 查看rtcwake帮 ...

  2. BigDecimal 中 关于RoundingMode介绍

    RoundingMode介绍 RoundingMode是一个枚举类,有以下几个常量:UP.DOWN.CEILING.FLOOR.HALF_UP.HALF_DOWN.HALF_EVEN.UNNECESS ...

  3. 【前端】关于DOM节点

    参考这个: https://juejin.cn/post/6844903849614901261 DOM树的根节点是document对象 DOM节点类型:HTML元素节点(element nodes) ...

  4. 二级C复习

    二级C语言 队列 计算队列中元素个数 种 : rear > front ,直接减 第二种: rear < front 上面两种综合一起,求元素个数公式 :(r - f + maxsize) ...

  5. centos源码部署lua-5.3

    目录 一.介绍 二.部署 三.测试 一.介绍 Luat语言是在1993年由巴西一个大学研究小组发明,其设计目标是作为嵌入式程序移植到其他应用程序,它是由C语言实现的,虽然简单小巧但是功能强大. 二.部 ...

  6. h5文件下载

    // type1 await getFile(fileUrl).then((res) => { console.log('download',res); let bFile = window.U ...

  7. Win7远程连接问题:凭据不工作 & 没有授权此用户账户

    一 您的凭据不工作 1.问题描述 win7系统远程桌面到某个电脑的一个账户名为admin 的用户,但提示"您的凭据不工作,之前连到 *.*.*.*的凭据无法使用,请输入新凭据",即 ...

  8. Python pyecharts绘制漏斗图

    一.pyecharts绘制漏斗图方法简介 funnel.add()方法简介add(name, attr, value, funnel_sort="ascending", funne ...

  9. 使用NTP原理进行时间同步

    在一些物联网企业,平台会和嵌入式一起配合进行工作. 有时平台会希望嵌入式这边不使用现成的NTP方案自己去同步时间,而希望以平台下发的时间为准. 此时就有两个方案. 方案1.  平台下发一个时间戳tim ...

  10. 惊天大bug,一把螺丝刀,竟让我有家难回!

    1.回家路上看一地摊,螺丝刀2元一把,买了一个 2.芒格说:"如果你的工具只有一把锤子,你会认为任何问题都是钉子 " 那么当我手里有了一把起子,我看啥都是螺丝钉子. 出租屋里固定门 ...