mongo开发标准(待完善)
MongoDB开发规范
1.mongoDB库的设计
mongodb数据库命名规范:db_xxxx
禁止使用任何 " _ "(下划线)外的特殊字符
禁止使用数字打头的库名
数据库名最多为64字符
命名不能与系统库相同(admin、local、config)
2.mongoDB集合的设计
mongodb集合命名规范:t_xxxx
集合名全部小写
禁止使用任何 " _ "(下划线) 以外的特殊字符
禁止使用数字打头的集合名称
集合名称最多为 64字符
3.mongoDB文档的设计
文档中的 key 禁止使用任何 " _ "(下划线)以外的特殊字符
禁止使用 _id ,如:向 _id 中写入自定义内容中写入自定义内容
尽量不要让数组字段成为查询条件
尽量存放统一了大小写后的数据
单个文档不超过16M,嵌套不能超过100层;若单个文档超过16M,建议s使用GridFS
4.mongoDB索引的设计
尽量遵循最左前缀原则
索引名称长度不要超过 128 字符
尽可能的将单列索引并入组合索引以降低数量
多列索引尽量不要超过5个字段
单个集合索引数量适当控制至5个
避免对数组字段创建索引
TTL索引如果是复合索引则过期将失效
使用background模式批量创建索引
5.分布式集群限制
分片key最大长度不能超过512字节
分片key索引类型不能是text、数据索引和geo索引
分片集合单个文档的条件操作必须带分片key或者_id
分片key及其值不允许修改
分片集合不允许创建(不含分片key前缀)唯一性索引
6.其他建议
查询、更新与删除必须带条件并且条件字段具有合适的索引(最好是以_id字段为条件)
update必须使用$set否则会重置文档
find和aggregate操作建议按需返回对应的字段
全集合扫描排序的内存限制32M,故需要为排序添加索引,控制排序的数量
aggregate管道操作的内存限制100MB,故需要控制计算数据量和调整allowDiskUse允许磁盘排序
数据元素添加尽量使用$push并且避免对中间元素进行更新
建议实际业务每次批量更新控制在1000~5000
默认情况下bulkWrite操作有序一般建议设置false
为避免批量操作导致复制延迟可每批适当sleep
开发不能在业务里面建立索引,加索引需要联系dba
7.驱动配置
对于只做查询的程序连接(如数据分析)读写优先级read_preference必须设置成secondary
8.索引原则
1. 每个查询原则上都需要创建对应索引
2. 单个索引设计应考虑满足尽量多的查询
3. 索引字段选择及顺序需要考虑查询覆盖率及选择性
4. 对于更新极其频繁的字段上创建需慎重考虑
5. 对于数组索引需要慎重考虑未来元素个数
6. 对于超长字符串类型字段上慎用B-tree索引
7. 对于重度字符串搜索可考虑第三方解决方案
8. 并发更新较高的单个集合上不适宜创建过多索引
mongo开发标准(待完善)的更多相关文章
- [课程设计]Scrum 1. 8多鱼点餐系统开发进度(完善整个订餐页面工作)
[课程设计]Scrum 1. 8多鱼点餐系统开发进度(完善整个订餐页面工作) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题: ...
- MongoDB硬件及开发标准规范
大数据平台部 运维研发组 MongoDB硬件及开发标准规范 说明: 无特殊情况,均以此文档为参考文件搭建,如有特殊情况,需与运维研发组和开发组商议后进行更改. MongoD ...
- 《嵌入式linux应用程序开发标准教程》笔记——6.文件IO编程
前段时间看APUE,确实比较详细,不过过于详细了,当成工具书倒是比较合适,还是读一读这种培训机构的书籍,进度会比较快,遇到问题时再回去翻翻APUE,这样的效率可能更高一些. <嵌入式linux应 ...
- Java技术开发标准JSR介绍
JSR我们需要先提及JCP(Java Community Process SM(JCP SM)).JCP是为Java技术开发标准技术规范的机制.任何人都可以注册并参与审阅和提供Java规范请求(JSR ...
- Vue/小程序/小程序云+Node+Mongo开发微信授权、支付和分享
大家好,我是河畔一角,今天给大家介绍我的第三门实战课程:基于微信开发的H5.小程序和小程序云的授权.支付和分享专项课程. 一.这一次为什么会选择微信支付和分享的课题呢? 金庸的小说中曾提到:有人的地方 ...
- 请推荐下比较适合中小企业的ERP系统,如odoo,除前期开发和不定期完善,有没有其他固定月费或年费?
odoo的话你自己就可以下载开源的安装使用的啊,如果你要别人帮你开发和完善做技术服务的话一般都还是要年费的,主要是因为要帮你做维护或修bug什么的,自己能搞定的话自然不需要的哦.只是odoo使用的是p ...
- Web前端开发标准规范
web前端开发规范的意义 提高团队的协作能力 提高代码的复用利用率 可以写出质量更高,效率更好的代码 为后期维护提供更好的支持 一.命名规则 命名使用英文语义化,禁止使用特殊字符,禁止使用拼音,禁止使 ...
- springboot2.0 web 开发标准目录架构
├── clean-run.sh ├── logs/ 日志文件目录 │ ├── sb2-web_test_2018-06-02_0959.0.log │ └── sb2-web_test.log | ...
- Lrc歌词-开发标准
LRC歌词是在其程序当中实现的专门用于MP3等歌词同步显示的标签式的纯文本文件,如今已经得到了广泛的运用.现就LRC歌词文件的格式规定详细说明,已供程序开发人员参考. LRC文件是纯文本文件,可以用记 ...
随机推荐
- 1-10假期训练(hdu-2059 简单dp)
题目一:传送门 思路:水题,模拟即可 题目二:传送门 思路:dp,决策每个充电站是否要充电.(决策只有搜索,DP两种解决方法) (1)考虑状态的个数,n+2个,因为除了n个还有位置0,终点len两种状 ...
- 蓝绿部署、红黑部署、AB测试、灰度发布、金丝雀发布、滚动发布的概念与区别(转)
出处:https://www.baidu.com/link?url=QjboallwNm_jxcL3fHG57wEakiBfAs_3-TChTGu1eBXstlHEsGBc-NDA7AKTqsiroB ...
- 引用限定符(c++11)
1.概念 1)下面这种情况将对一个右值调用成员函数.对右值赋值 string s1 = "abc", s2 = "def"; auto n = (s1 + s2 ...
- lnmp源码编译安装zabbix
软件安装 Mysql 安装 tar xf mysql-5.7.13-1.el6.x86_64.rpm-bundle.tar -C mysql rpm -e --nodeps mysql-libs-5 ...
- UVa 11077 Find the Permutations (计数DP)
题意:给定 n 和 m,问你在 1 ~ n 的所有排列中,有多少个排列满足至少要交换 m 次才能变成 1 2 3 ... n. 析:首先,先考虑一下,某个排列,要变成 1 2 3 .. n,最少要交换 ...
- python 基础_ 数组的 增删改查3
数组是运用在多个数据存在一个变量中的,而在调用的时候可以调用所需要的数组. 创建数组 a = ['a','b','c','d','f'] #创建一个数组a其中有5个元素分别是abcdf 1.查询.所谓 ...
- Android 全局搜索条写成自定义控件-曹永思
图文: 1.Android 自定义控件的布局文件 2.编写Android 自定义控件的要处理的逻辑代码(曹永思) 3.在调用自定义控件的 Activity的布局文件中调用Android 称之为控件,控 ...
- 大压力下Redis参数调整要点
调整以下参数,可以大幅度改善Redis集群的稳定性: 为何大压力下要这样调整? 最重要的原因之一Redis的主从复制,两者复制共享同一线程,虽然是异步复制的,但因为是单线程,所以也十分有限.如果主从间 ...
- 图片轮滚形式A
思想解读: 一共有5幅图片,初始时只显示一幅,其余四幅隐藏.然后使用trigger设置右下角的点击事件,根据点击的索引显示某幅图片.原理不算复杂. 结论: trigger的使用,模拟点击 层淡入淡出函 ...
- ES基本操作
倒排索引 ElasticSearch使用一种称为倒排索引的结构,它适用于快速的全文搜索.一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表. 查询 # 查看索引配置GE ...