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文件是纯文本文件,可以用记 ...
随机推荐
- c++关键字volatile的作用
1.易变性 1.1概念 编译器对volatile修饰的变量,当要读取这个变量时,任何情况下都会从内存中读取,而不会从寄存器缓存中读取(因为每次都从内存中读取体现出变量的“易变”) 1.2测试代码(VS ...
- rpcbind.service启动失败
新装的服务器,启动rpcbind.service通常失败,执行下面的两个命令经常卡死,一直不返回,也不报错 #systemctl start nfs-server.service #systemctl ...
- Page页面生命周期——微信小程序
onLoad:function (options) { //页面初始化 console.log('index Load') }, onShow:function () { // ...
- day37(类加载器)
类的加载器:将class文件加载到JVM中执行这个文件. Java中将类加载器分成三类: 引导类加载器: JAVA_HOME/jre/lib/rt.jar | 扩展类加载器: JAVA ...
- POJ2456--Aggressive cows(Binary Search) unsolved
Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) stalls. The stal ...
- java基础-day6
第06天 java基础语法 今日内容介绍 u Eclipse断点调试 u 基础语法的练习 第1章 Eclipse断点调试 1.1 Eclipse断点调试概述 Eclipse的断点调试可以 ...
- mysql 中 datetime和 timestamp的区别
DATETIME日期和时间的组合.支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'.MySQL以'YYYY-MM-DD HH:MM:SS'格式显示DA ...
- Android Caused by: java.lang.IllegalArgumentException: column '_id' does not exist
出错原因:在查询整个sqlite数据库时,没有查询到 "_id" 这一列. 原来的代码是:mSQLiteDatabase.query(table_name, new String[ ...
- Java方法、构造方法的重载;创建对象;调用方法
方法的重载 概念:多个同名但是不同参数的方法称为方法的重载 作用:编译器会根据调用时传递的实际参数自动判断具体调用的是哪个重载方法 特点:方法名相同:同一作用域:参数不同:数量不同 类型不同 顺序不同 ...
- hdu1258
给你两个数t,n 接下来输入n个数字 让你输出所有数字相加等于n的组合 4 6 4 3 2 2 1 1 t n 4 3+1 2+2 2+1+1 Sample Input 4 6 4 3 2 2 1 1 ...