MongoDB开发规范

  

一。命名规则

  

1。mongodb版本选择:
默认新装数据库使用mongodb 3。X社区版。建议3.2.10 +

  

2。数据库设计规范
数据库名可以是满足以下条件的任意utf - 8字符串:
(1)不能出现除“_”字符以外的特殊字符;
(2)不能含有”(空格),,,美元/,,和(空字符),
(3)应全部小写;
(4)最多30字符。
(5)禁止使用数字打头的库名

  

3。集合命名规则
必须满足下列条件的任意utf - 8字符串
(1)集合名不能是空字符串";不能出现除“_”字符以外的特殊字符,禁止使用数字开头的名称,
(2)集合名不能以“系统”。开的头,这是为系统集合保留的前缀,例如system.users这个集合保存着数据库的用户信息,system.namespaces集合保存着所有数据库集合的信息;
(3)用户创建的集合名字不能含有保留字符$。除非你要访问系统创建的集合,否则不可在名字里出现美元;
(4)集合名应简洁明了,尽量都使用小写;

  

4。字段命名规范
(1)字段不能含有(空字符)。
(2)禁止使用数字开头的字段名;
(3)不可以“”开头命名字段名称,不能出现除“”字符以外的特殊字符;
(4)字段引用必须采用集合名+被引用字段名称,例如集合用户的键id在集合user_info中被引用,用user_id作为键名,
(5)只有在遇到引用情况下,字段中包含的集合名首字母需要大写,其他一律小写格式。
(6)如果字段较大,应尽量压缩存放
(7)如果字段较大且会成为查询条件,例如一长串的url,可以转成md5后存放
(8)禁止自定义_id的值。

  

二:数据库设计规范

  

1。
(1)合理容量规划和库级拆分
创建新的数据库时,提前进行容量规划库的集合数,存储容量,每秒等,是放在已有集群,还是新创建集群部署。
(2)避免把所有集合都放在同一个数据库,造成一个库中集合过多;
(3)业务禁止使用 id字段;
业务避免向id字段写入自定义的业务数据:因MongoDB的
Jd字段默认是主键,类似于MySQL InnoDB表的主键,如果业务写入无序数据(如uuid/md5),集合本身是B +树,为保证树的平衡,会大副度调整内部存储数据结构;写入数据的代价很大,容易导致写入性能低;
(4) MongoDB数据是大小写敏感的,如业务不区分大小,建议冗余一个全部大写或小写字段,用于不区分大小写的数据检索效率*
mongo中数据查询是大小写敏感的,例如{f,“aA"}的查询条件,不能匹配字段为“aa”、“aA",“aa”值的文档。有的业务需忽略大小,需通过正则方式进行处理{f: aa/},虽实现忽略大小功能,但查询效率很低,同时很耗CPU资源。解决这类需求,希望冗余一个全大写(或小)写的字段,用于业务忽略大小的检索需求,例如对f字段冗余是字段,存储字段内容全大写{f_upper !”aa’}
(5)对高频大字段进行压缩存储:
很多高频的查询,如果存在返回较大字段数据(如10 KB以上),当每秒增加后很容易把MongoDB服务器网络带宽占满。
或写入频次较高,会导数oplog实体很大。建议这类高频和较大的数据,在业务层进行压缩后,再存入MongoDB中。
(6) ObjectId存储时,作为ObjectId存储,不可存成字符串类型;
原因:第,一方便查询(字符串和ObjectId不能相互匹配)第二,ObjectId含有有用的信息,如从插入的时间戳可以得知创建日期;第三,字符串表示的ObjectId要多占用两倍的磁盘空间;

  

2。索引设计规范
(1) MongoDB的索引仅支持1 k以内的字段,如果你存入的数据长度超过1 k,那么它将无法被索引
(2)索引名称长度不要过长;命名方式:idx_字段名;组合索引建议包含所有字段名,过长的字段名可以采用缩写形式。
(3)唯一索引命名规范:uniq_字段名称
(3)应尽量综合评估查询场景,通过评估尽可能的将单列索引并入组合索引以降低所以数量;
(4)索引越多,插入或修改记录就会导致MongoDB越慢。
(5)创建索引要在后台创建,避免阻塞业务正常DML和查询.db.works.createIndex ({1, b: 1}, {“name":“idx_字段名”},{背景:真})
(6)禁止在数组字段上创建索引;
(7)在创建组合索引的时候,应评估索引中包含的字段,尽量将选择性高(唯一值多的数据)的字段放在组合索引的前面;
(8)在开发业务的时候尽量检查自己的程序性能,多使用解释()查看执行计划。
(9)禁止冗余索引,例如索引idx_account_sName_createTime {“account":1、“sName":1、“createTime":1}和索引idx_account {“account":1}索引冗余,可删除idx_account索引。

  

3。查询规范
(1)查询语句是否使用到索引,在查询条件的键上,或者排序条件的键上必须有索引(数据量较小的集合除外),

MongoDB开发规范