• sharding设计须考虑的几个因素

  • Sharding Key的选择

          在片键的选择上,最好是能够在字段中选择混合型的片键,大范围的递增健、和随机分布的健组合,如按月份递增、按用户名随机。
  • 递增的sharding key

                优点:数据文件移动相对较少;
                缺点:对于不断写入的业务,会造成最后一个分片变成写热点,导致最后的一块分片chunk数量比其他的多,最终chunk不断移动;
  • 随机的sharding key

                优点:数据分布相对均匀、写入的数据基本上能够分布在多个分片上;
                缺点:随机的片键本身就会给磁盘带来巨大的IO读写;
 
 
  • ChunkSize的大小问题

          ChunkSize的默认大小为64M,但是需要根据业务情况、不同硬盘型号、不同文件系统指定合适的chunksize,单个chunkSize一般为100M-200M之间,ChunkSize的大小应该在设计阶段、业务上线之前就要确定。
  • 较大的ChunkSize

               优点:chunk分裂少;
               缺点:存在数据分布不太均衡;以及chunk移动时,会消耗大量的IO写资源;
  • 较小的ChunkSize

                优点:迁移速度快、数据分布更均衡;
                缺点:chunk分裂更频繁,同样也会消耗大量的IO写资源;
 
  • Balancer的时间选择

          需要在业务当天的低谷时段进行数据的自动均衡,如在业务高峰时段设置数据均衡,业务和均衡都在抢占磁盘IO,系统的吞吐量会一下子下降,一般的业务凌晨的业务量会稍微小一些。
  • count值不准确

                由于sharding环境下,写入时,chunk都在不断迁移,所以查询出来的数量往往会大于实际写入的数量,用db.collection.aggregate([{$group: {_id: null,count: {$sum: 1}}}]),可以看到实际的写入值。
 
  • 库设计

1. 生产环境中,库尽量不要开启auto-sharding功能;

2. 在业务量不是很大的情况下,可以将库手动指定在某个分片上;

3. 集群内存的大小总和应该要大于索引+oplog+数据热点;

4. 将更新频繁的collection放在同一个库中,将更新不是很平凡的表也归类到一个库中;

 
  • collection设计

1. 虽然MongoDB为文档型数据库,无须制定schema,但是也意味着每个文档都有重复的字段,会带来空间的浪费,可以通过以下两种办法解决:

1.1  减小字段名,如将address用a来替代,可读性问题在应用层用字段名映射进行解决;

1.2  利用现有wiredtiger引擎中的zlib压缩,可以减小存储空间,也可以减小IO压力;

2. MongoDB自带的_id值默认就是12个字节,可以考虑用其他主键替代,如用户的UID等,可以减小MongoDB的计算压力和存储空间;

3. 对于大表必须要考虑分配的,可以根据主键进行分类,按每个分片的子表不要超过1000条记录计算。

MongoDB Sharding、库、collection设计学习汇总的更多相关文章

  1. 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章       STM32H7的HAL库框架设计学 ...

  2. 【安富莱】V6,V5开发板用户手册,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔(2019-11-04)

    说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.本次工程延续以往的代码风格,从底层BSP驱动包到应用代码,变量命名,文件 ...

  3. 【安富莱】STM32H7用户手册发布,重在BSP驱动包设计方法,HAL库的框架学习,授人以渔,更新至63章(2019-07-21)

    说明: 1.本教程重在BSP驱动包设计方法和HAL库的框架学习,并将HAL库里面的各种弯弯绕捋顺,从而方便我们的程序设计. 2.由于是基于HAL库的文档,所以不限制H7系列,其它F1,F2,F3,F4 ...

  4. MongoDB Sharding分片配置

    Ps:mongod是mongodb实例,mongos被默认为为mongodb sharding的路由实例. 本文使用的mongodb版本为3.2.9,因此参考网址为:https://docs.mong ...

  5. ABP 学习汇总

    本文背景 公司最近规划的新框架准备基于ABP来搭建,自从在阳铭博客看到ABP框架的介绍后,就一直持续关注着,但还没真正在实际项目中直接使用ABP,只是自己做了一些学习和Demo.ABP所用到的一些新技 ...

  6. MongoDB Sharding 机制分析

    MongoDB Sharding 机制分析 MongoDB 是一种流行的非关系型数据库.作为一种文档型数据库,除了有无 schema 的灵活的数据结构,支持复杂.丰富的查询功能外,MongoDB 还自 ...

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

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

  8. [EntLib]微软企业库5.0 学习之路——第一步、基本入门

    话说在大学的时候帮老师做项目的时候就已经接触过企业库了但是当初一直没明白为什么要用这个,只觉得好麻烦啊,竟然有那么多的乱七八糟的配置(原来我不知道有配置工具可以进行配置,请原谅我的小白). 直到去年在 ...

  9. 基于mongoDB的capped collection的性能优化

    MonitorLogging改造(消息接入) 改造前架构: 可以看出原来的流程中,大量业务分析,业务接入耦合在web服务层.大量操作,导致线程线性的挂起线程. 改造后: 将业务通讯抽象成为Monito ...

随机推荐

  1. 实现在ios开发中的App滑动封面 UIScrollView

    - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. _scrol ...

  2. 迷信again

    当在VirtualBox中尝试安装Debian 8.3.0 三次都失败后 - 每次卡在安装软件这一步,我决定不再迷信Debian软件包质量高这件事.

  3. 2016年湖南省第十二届大学生计算机程序设计竞赛---Parenthesis(线段树求区间最值)

    原题链接 http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1809 Description Bobo has a balanced parenthes ...

  4. Java空白final

    Java 1.1允许我们创建"空白final",它们属于一些特殊的字段.尽管被申明为final,但却未得到一个初始值. 无论在哪种情况下,空白final都必须在实际使用前得到正确的 ...

  5. SQL查询数据的几大方法

    有你,查询数据我什么都不怕.快快掌握!! 出大招的工具: 1.使用LIKE.BETWEEN.IN进行模糊查询 eg1: SELECT * FROM Students WHERE 姓名 like '张% ...

  6. [TypeScript] Dictionary范例

    [TypeScript] Dictionary范例 Playground http://tinyurl.com/o7czcxo Samples class Dictionary { [index: s ...

  7. 【循序渐进学Python】15.网络编程

    Python 内置封装了很多常见的网络协议的库,因此Python成为了一个强大的网络编程工具,这里是对Python的网络方面编程的一个简单描述. 1. 常用的网络设计模块 在标准库中有很多网络设计相关 ...

  8. Velocity – 另外一款加速的 jQuery 动画插件

    Velocity 是一款 jQuery 插件,重新实现了 $.animate() 方法,提供更高的性能(比 CSS 动画还更快),同时包括一些新的功能,以改进动画工作流程.Velocity 除了包括所 ...

  9. 分享50款 Android 移动应用程序图标【上篇】

    在这个移动程序流行的时代,持续增长的应用程序经济充满了商业机遇.任何对应用程序设计感兴趣的人,将会喜欢上这里的50个独特的 Android 应用程序图标.这些例子中的图标能够让应用程序的设计更具吸引力 ...

  10. android ndk开发(二)实现一个官方demo

    实现了一个官方的demo:bitmap-plasma(水波纹) 源代码就在samples文件夹下,可以自己去找. 界面: 建立项目的步骤和配置环境不明白的可以去看:http://www.cnblogs ...