MongoDB硬件及开发标准规范
大数据平台部
运维研发组
MongoDB硬件及开发标准规范
说明:
无特殊情况,均以此文档为参考文件搭建,如有特殊情况,需与运维研发组和开发组商议后进行更改。
MongoDB
标 题硬件标准及研发规范
目 录
第1章
MongoDB配置标准规范.................................................................................. 1
1.1 MongoDB版本选择................................................................................... 1
1.1.1 稳定版本................................................................................................. 1
1.2 研发数据集群规划...................................................................................... 1
1.2.1 标准集群(repl set复制集)................................................................ 1
部署过程见《MongoDB高可用集群C生产部署文档V1.0》................... 1
1.2.2 标准集群(repl set复制集+sharding分片)....................................... 1
部署过程见《MongoDB高可用集群A生产部署文档V1.1》.................. 2
1.2.3 超大规模集群(repl set复制集+sharding分片)............................... 2
部署过程见《MongoDB高可用集群B生产部署文档V1.0》................... 2
1.3 大数据海量数据集群规划.......................................................................... 2
1.2.1 海量数据标准集群(repl set复制集)................................................ 2
部署过程见《MongoDB高可用集群C生产部署文档V1.0》................... 2
1.2.2 海量数据标准集群(repl set复制集+sharding分片)....................... 2
部署过程见《MongoDB高可用集群A生产部署文档V1.1》.................. 2
1.2.3 海量数据超大规模集群(repl set复制集+sharding分片)............... 3
部署过程见《MongoDB高可用集群B生产部署文档V1.0》................... 3
1.4 主机配置标准化参数.................................................................................. 3
1.5 基础卷分配原则.......................................................................................... 6
1.6 卷监控阈值要求.......................................................................................... 7
第2章 MongoDB研发规范.......................................................................................... 8
2.1 库设计................................................................................................................ 8
2.1.1 mongodb库设计..................................................................................... 8
2.2 集合设计............................................................................................................ 8
2.2.1 MongoDB集合设计............................................................................... 8
2.3 文档设计............................................................................................................ 9
2.3.1 MongoDB文档设计............................................................................... 9
2.4 索引设计............................................................................................................ 9
2.4.1 MongoDB索引设计............................................................................... 9
2.4 索引设计.......................................................................................................... 10
第1章 MongoDB配置标准规范
1.1
MongoDB版本选择
1.1.1 稳定版本
默认新装数据库使用MongoDB 3.X 社区版(具体详情请查看如下表格),已经使用且数据量大和已有无法改造升级的系统除外。
|
版本 |
建议 |
|
3.2.10 |
见标准安装包文件夹内 |
|
3.4.X |
待测试调研 |
1.2
集群规划
1.2.1 标准集群(repl set复制集)
部署过程见《MongoDB高可用集群A生产部署文档V1.0》
l
集群节点: 6节点(1 primary +4 secondry + 1 仲裁)
l
主机配置:
Core64 , 256G 内存 (按需申请资源见第三章计算标准)
l
硬盘配置
:优先SSD/HDD 2T RAID-10
l
容量和扩容规划:单节点内存使用率控制在70%,集群LUN 总量达到2T以上时规划新的大库集群或者扩容相应硬件
1.2.2 标准集群(repl set复制集+sharding分片)
部署过程见《MongoDB高可用集群B生产部署文档V1.1》
l
集群节点: 3节点
l
主机配置:
Core64 , 128G 内存
l
硬盘配置
:优先SSD/HDD 5T RAID-10 (使用1TB MLC SSD 组装)
l
容量和扩容规划:单节点内存使用率控制在70%,集群LUN 总量达到5T以上时规划新的大库集群或者相应硬件
1.2.3 超大规模集群(repl set复制集+sharding分片)
部署过程见《MongoDB高可用集群C生产部署文档V1.0》
l
集群节点: 7节点
l
主机配置:
Core64, 128G 内存
l
硬盘配置
:优先SSD/HDD 10T RAID-10
l
容量和扩容规划:单节点内存使用率控制在70%,集群LUN 总量达到10T以上时规划新的大库集群或者相应硬件
1.3
基础卷分配原则
|
卷类型 |
卷名 |
初始大小G |
存储类型 |
用途 |
其他说明 |
|
软件卷 |
/app/mongodb |
30 |
本地 |
MongoDB软件 |
本机所有数据库共享 |
|
数据卷 |
/data/mongodb/*/data 其中*代表每个实例的文件名 |
根据要求 |
本地 |
数据库数据 |
共享给集群内所有主机 |
|
日志卷 |
/data/mongodb/*/log 其中*代表每个实例的文件名 |
根据要求 |
本地 |
数据库日志数据 |
共享给集群内所有主机 |
|
备份卷 |
/mongodb_backup/ |
500 |
本地盘 |
接DP备份 |
本机所有数据库共享当前仅在容灾机房有要求 |
1.4
卷监控阈值要求
|
卷类型 |
卷名 |
Warning |
Critical |
|
软件卷 |
/app/mongodb |
80% |
85% |
|
数据卷 |
/data/mongodb/*/data |
80% |
85% |
|
日志卷 |
/data/mongodb/*/log |
80% |
85% |
|
备份卷 |
/mongodb_backup/ |
80% |
85% |
第2章 MongoDB研发规范
2.1 库设计
2.1.1 mongodb库设计
l
mongodb数据库命名规范:db_xxxx
禁止使用任何 " _ "(下划线)外的特殊字符
l
库名全部小写,禁止使用任何_以外的特殊字符,禁止使用数字打头的库名,如:123_abc
l
库以文件夹的形式存在,使用特殊字符或其它不规范的命名方式会导致命名混乱
数据库名最多为64字符
l
在创建新的库前应尽量评估该库的体积、QPS等,提前与DBA讨论是应该新建一个库还是专门为该库创建一个新的集群
l
不能为空字符串(” “)
l
不能以$开头
l
不能包含.(点号)和空字符串
l
数据库名区分大小写(建议数据库名全部使用小写)
l
数据库名最长为64个字节
l
不要与系统保留的数据库名相同,这写数据库包括:admin,local,config等
2.2 集合设计
2.2.1 MongoDB集合设计
l
mongodb集合命名规范:t_xxxx
l
集合名全部小写,禁止使用任何_以外的特殊字符,禁止使用数字打头的集合名,如:123_abc,禁止system打头
l
system是系统集合前缀
集合名称最多为64字符
为了避免库级锁带来的问题,应尽量对写入较大的集合使用“单库单集合”的结构,所以对于新增业务应尽量创建新库,而不是在现有库中创建新集合
l
一个库中写入较大的集合会影响其它集合的读写性能
如果评估单集合数据量较大,可以将一个大表拆分为多个小表,然后将每一个小表存放在独立的库中,由于MongoDB是库级锁,因此这样做可以大幅减少并发写入带来的锁争用问题
l
集合名不能为空字符串(” “)
l
不能包含\0或空字符,这个字符表示键的结尾
l
集合名不能以”system.”开头,此前缀是系统本身保留的
l
集合名不能包含$字符(注:可包含 . 点号)
2.3 文档设计
2.3.1 MongoDB文档设计
l
文档中的key禁止使用任何_以外的特殊字符
l
尽量将同样类型的文档存放在一个集合中,将不同类型的文档分散在不同的集合中
l
相同类型的文档能够大幅度提高索引利用率,如果文档混杂存放则可能会出现查询经常需要全表扫描的情况
l
禁止使用_id,如:向_id中写入自定义内容
l
尽量存放统一小写后的数据
l
尽可能的缩短key的长度(注意是尽可能!会涉及到性能问题)
2.4 索引设计
2.4.1 MongoDB索引设计
l
优先使用覆盖索引
l
MongoDB 的组合索引使用策略与 MySQL 一致,遵循“最左原则”
l
索引名称长度不要超过128字符
l
应尽量综合评估查询场景,通过评估尽可能的将单列索引并入组合索引以降低所以数量,结合1,2点
l
在创建组合索引的时候,应评估索引中包含的字段,尽量将数据基数大的字段放在组合索引的前面
l
在数据量较大的时候,MongoDB 索引的创建是一个缓慢的过程,所以应当在上前线或数据量变得很大前尽量评估,按需创建会用到的索引
l
MongoDB 的索引创建是库级锁,在索引创建时该集合所在库不可读写,所以如需添加索引,请联系 DBA
l
特别注意基于地理位置的索引建立时会带来的问题。
2.4 索引设计
第3章 参考Mongodb硬件资源计算标准
3.1 Cpu资源计算标准
3.1.1 副本集
标准:64core---------2TB snappy压缩算法 CPU一个线程会跑满一个核心。假设写入一个线程,读取一个线程,那这两个线程在接近满负荷跑时两个CPU核心会用完。
----------------------------------------------------------------------------------
primary节点:例
cpu core = 2(系统预留)+12000(读写)/1000 core,按实际情况配置cpu资源
-----------------------------------------------------------------------------------
3.1.2 分片副本集
------------------------------------------------------------------------------------
待计算评估。
-------------------------------------------------------------------------------------
3.2 内存资源计算标准
数据量:内存≈3:1 (最低标准5:1)
Eg:700G数据量:
在副本集模式下最低应该使用128G内存。遵循最低标准或接近原则。
--------------------------------------
700/5=140≈128
---------------------------------------
在分片副本集(3分片下)每个实例机器应该使用64GB内存
------------------------------------------------------------
700/5=140G=<64G*3
------------------------------------------------------------
3.3 硬盘资源计算标准
3.3.1 硬盘类型
在资源允许情况下,mongodb优先以SSD为主。资源不允许情况下,如有以下情况,则必须用SSD。
---------------------------------------------------------------------------------------------
读每秒读取超过数据量100M
,读队列阻塞上升,则必须用SSD。
写每秒读取超过数据量100M
,写队列阻塞上升,则必须用SSD。
---------------------------------------------------------------------------------------------
磁盘规格:
以700G数据量为例:使用磁盘大小≈基数+每日增长数据量*90天
3.3.2 硬盘大小
根据实际数据量增长率,默认至少应该保留数据量3个月增长空间。
3.4 网络网卡资源计算标准
如果硬盘是SSD,那么可以在超高情况200M/s写入或者读取上在主节点和第二备节点提供万兆网卡。
其他情况用千兆网卡即可。
MongoDB硬件及开发标准规范的更多相关文章
- Web前端开发标准规范
web前端开发规范的意义 提高团队的协作能力 提高代码的复用利用率 可以写出质量更高,效率更好的代码 为后期维护提供更好的支持 一.命名规则 命名使用英文语义化,禁止使用特殊字符,禁止使用拼音,禁止使 ...
- Mysql系列二:Mysql 开发标准规范
原文链接:http://www.cnblogs.com/liulei-LL/p/7729983.html 一.表设计 1. 库名.表名.字段名使用小写字母,“_”分割. 2. 库名.表名.字段名不超过 ...
- mysql 开发标准规范
一.表设计 1. 库名.表名.字段名使用小写字母,“_”分割. 2. 库名.表名.字段名不超过12个字符. 3. 库名.表名.字段名见名知意,尽量使用名词而不是动词. 4. 优先使用InnoDB存储引 ...
- Android开发代码规范(转)
Android开发代码规范 1.命名基本原则 在面向对象编程中,对于类,对象,方法,变量等方面的命名是非常有技巧的.比如,大小写的区分,使用不同字母开头等等.但究其本,追其源,在为一个资源其名称 ...
- Android开发编码规范(自用)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境 ...
- ym——Android开发编码规范(自用)
转载请注明本文出自Cym的博客(http://blog.csdn.net/cym492224103),谢谢支持! Android开发编码规范 目的及指导原则 目的 统一规范 Eclipse编辑环境下J ...
- iOS扩展——Objective-C开发编程规范
最近准备开始系统学习一个完整项目的开发流程和思路,在此之前,我们需要对iOS的开发变成规范进行更系统和详尽的学习,随意对编程规范进行了整理和学习.本文内容主要转载自:Objective-C-Codin ...
- 我自己总结的C#开发命名规范整理了一份
我自己总结的C#开发命名规范整理了一份 标签: 开发规范文档标准语言 2014-06-27 22:58 3165人阅读 评论(1) 收藏 举报 分类: C#(39) 版权声明:本文为博主原创文章, ...
- PHP-FIG - PHP 标准规范
转自:https://psr.phphub.org/ PHP 标准规范 PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 ...
随机推荐
- Codeforces Round #459 Div. 1
C:显然可以设f[i][S]为当前考虑到第i位,[i,i+k)的状态为S的最小能量消耗,这样直接dp是O(nC(k,x))的.考虑矩阵快速幂,构造min+转移矩阵即可,每次转移到下一个特殊点然后暴力处 ...
- BZOJ 1977 严格次小生成树(算竞进阶习题)
树上倍增+kruskal 要找严格次小生成树,肯定先要找到最小生成树. 我们先把最小生成树的边找出来建树,然后依次枚举非树边,容易想到一种方式: 对于每条非树边(u,v),他会与树上的两个点构成环,我 ...
- github 快速部署
在github上 新建一个项目后,并且未提交任何代码,会有一个页面提示我们如何快速部署.在此备份一下那个页面 Quick setup — if you’ve done this kind of thi ...
- 线性基求第k小异或值
题目链接 题意:给由 n 个数组成的一个可重集 S,每次给定一个数 k,求一个集合 \(T \subseteq S\), 使得集合 T 在 S 的所有非空子集的不同的异或和中, 其异或和 \(T_1 ...
- 【Linux命令】用户及分用户组
查看用户 查看所有用户命令: cat /etc/passwd 上面命令输出内容比较杂乱,可以使用如下命令简化输出: #对于 cat /etc/passwd 的替换 cat /etc/passwd|gr ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- 【UOJ#311】【UNR #2】积劳成疾(动态规划)
[UOJ#311][UNR #2]积劳成疾(动态规划) UOJ Solution 考虑最大值分治解决问题.每次枚举最大值所在的位置,强制不能跨过最大值,左右此时不会影响,可以分开考虑. 那么设\(f[ ...
- [luogu5004]专心OI - 跳房子【矩阵加速+动态规划】
传送门:https://www.luogu.org/problemnew/show/P5004 分析 动态规划转移方程是这样的\(f[i]=\sum^{i-m-1}_{j=0}f[j]\). 那么很明 ...
- H5左侧滑删除简单实现
简单的左滑删除 实现功能 在一个列表的一条中,往左滑动时,右边出现删除按钮,点击可删除这一条 实现办法 列表中一项为父div,其中包含内容div和删除按钮span 父div相对定位,设置宽度.内容di ...
- BJWC2018上学路线
题目描述 小B 所在的城市的道路构成了一个方形网格,它的西南角为(0,0),东北角为(N,M). 小B 家住在西南角,学校在东北角.现在有T 个路口进行施工,小B 不能通过这些路口.小B 喜欢走最短的 ...