• 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. PagerTabStrip及自定义的PagerTab

    如图是效果图      开发中经常会用到上面是一个Tab下面是一个ViewPager(ViewPager再包含几个Fragment),当点击Tab或是滑动ViewPager,Tab及ViewPager ...

  2. Scalaz(21)-类型例证:Liskov and Leibniz - type evidence

    Leskov,Leibniz,别扭的名字,是什么地干活?碰巧从scalaz源代码里发现了这么个东西:scalaz/BindSyntax.scala /** Wraps a value `self` a ...

  3. ahjesus 让我的MVC web API支持JsonP跨域

    无数被跨域请求爆出翔来的人 遇到请求成功却不能进入success 总是提示parsererror 参考一下两篇文章吧 参考文章http://www.asp.net/web-api/overview/s ...

  4. Mac 连接阿里云服务器

    1. 通过命令行连接 Server 并设置 1.1 连接 Server #: ssh root@hctec.top ssh: 远程连接工具 root: 远程服务器用户名, 此处我用的是: root 用 ...

  5. shell脚本集合

    慢慢学习,慢慢记吧 第一个shell脚本,创建用户,默认密码用户名,使得用户第一次登陆强制修改密码的脚本 #/bin/bash #创建用户,指定初始密码用户名,第一次登陆后强制修改用户名 userad ...

  6. Java经典实例:比较浮点数

    /** * Created by Frank * 比较浮点数 */ public class FloatCmp { // 公差 private final static Double EPSILON ...

  7. Django 模版语言详解

    一.简介 模版是纯文本文件.它可以产生任何基于文本的的格式(HTML,XML,CSV等等). 模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签. 例: {% extends "b ...

  8. KnockoutJS---一个极其优秀的MVVM模型的js框架

    相信对于DotNet平台的开发人员来讲,MVVM模式已经不再是个陌生的词汇了吧.而我们今天介绍的Knockout JS, 则是一个MVVM模式的JS框架,官方网址:http://knockoutjs. ...

  9. iframe父页面获取子页面的高度

    最近做项目中用到了iframe,子页面更改父页面的高度,经过九九八十一难,找到了解决的办法. $(window).load(function() {  var h=$(document).height ...

  10. windows 8安装wp8之后鼠标没反应了

    笔记本是windows 8 系统,昨天安装了windows phone 8.0 SDK 之后,发现无线鼠标没反应了,但是触摸屏鼠标可以正常移动!真是奇怪,旁边同学也是安装了这个sdk,但没出什么问题! ...