• 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. 2016暑假多校联合---A Simple Chess

    2016暑假多校联合---A Simple Chess   Problem Description There is a n×m board, a chess want to go to the po ...

  2. Servlet与多线程与IO操作

    1.JVM内存模型相关概念 2.Java多线程并发深入理解 3.Servlet.设计模式.SpringMVC深入理解 4.Java基础遗漏点补充 数据库连接池:JDBC connection pool ...

  3. opencart 后台导航菜单添加步骤

    1,找到在catalog\language\english\common\header.php // Text$_['text_affiliate'] = 'Affiliates';$_['text_ ...

  4. mysql 更改默认数据目录

    http://www.cnblogs.com/chenny7/p/3642363.html 本文主要介绍在CentOS下通过yum命令安装MySQL之后,如何移动默认数据目录到指定位置. 安装mysq ...

  5. 使用 WordPress 插件模板开发高质量插件

    WordPress 插件样板是标准化的,有组织的,面向对象的基础,用于构建高品质的 WordPress 插件.样板遵循编码标准和文件标准,所以你不必自己学习这些,根据注释编写代码即可. 官方网站    ...

  6. heX——基于 HTML5 和 Node.JS 开发桌面应用

    heX 是网易有道团队的一个开源项目,允许你采用前端技术(HTML,CSS,JavaScript)开发桌面应用软件的跨平台解决方案.heX 是你开发桌面应用的一种新的选择,意在解决传统桌面应用开发中繁 ...

  7. Java 项目JDBC 链接数据库中会出现的错误

    1.出现的地方 package com.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql ...

  8. Android 字符乱码问题的处理

    <Android 网络HTML查看器>一文中,运行代码实践一下 发现html源代码中出现了乱码,原因很明显:charset="gb2312" android默认的字符集 ...

  9. nutz的json视图

    2.3. json视图 返回json视图有两种方法: @Ok("json")  与@Ok(“raw:json”) 2.3.1. @Ok("json") (1) ...

  10. [转]三大WEB服务器对比分析(apache ,lighttpd,nginx)

    原博文地址:http://www.blogjava.net/daniel-tu/archive/2008/12/29/248883.html 一.软件介绍(apache  lighttpd  ngin ...