星空

人生不仅有眼前的苟且,还有诗和远方.

0%

MongoDB研发规范

库设计

l mongodb数据库命名规范:db_xxxx
禁止使用任何 “ _ “(下划线)外的特殊字符

l 库名全部小写,禁止使用任何_以外的特殊字符,禁止使用数字打头的库名,如:123_abc

l 库以文件夹的形式存在,使用特殊字符或其它不规范的命名方式会导致命名混乱
数据库名最多为64字符

l 在创建新的库前应尽量评估该库的体积、QPS等

l 不能为空字符串(” “)

l 不能以$开头

l 不能包含.(点号)和空字符串

l 数据库名区分大小写(建议数据库名全部使用小写)

l 数据库名最长为64个字节

l 不要与系统保留的数据库名相同,这写数据库包括:admin,local,config等

集合设计

l mongodb集合命名规范:t_xxxx

l 集合名全部小写,禁止使用任何_以外的特殊字符,禁止使用数字打头的集合名,如:123_abc,禁止system打头

l system是系统集合前缀
集合名称最多为64字符
为了避免库级锁带来的问题,应尽量对写入较大的集合使用“单库单集合”的结构,所以对于新增业务应尽量创建新库,而不是在现有库中创建新集合

l 一个库中写入较大的集合会影响其它集合的读写性能
如果评估单集合数据量较大,可以将一个大表拆分为多个小表,然后将每一个小表存放在独立的库中,由于MongoDB是库级锁,因此这样做可以大幅减少并发写入带来的锁争用问题

l 集合名不能为空字符串(” “)

l 不能包含\0或空字符,这个字符表示键的结尾

l 集合名不能以”system.”开头,此前缀是系统本身保留的

l 集合名不能包含$字符(注:可包含 . 点号)

文档设计

l 文档中的key禁止使用任何_以外的特殊字符

l 尽量将同样类型的文档存放在一个集合中,将不同类型的文档分散在不同的集合中

l 相同类型的文档能够大幅度提高索引利用率,如果文档混杂存放则可能会出现查询经常需要全表扫描的情况

l 禁止使用_id,如:向_id中写入自定义内容

l 尽量存放统一小写后的数据

l 尽可能的缩短key的长度(注意是尽可能!会涉及到性能问题)

索引设计

l 优先使用覆盖索引

l MongoDB 的组合索引使用策略与 MySQL 一致,遵循“最左原则”

l 索引名称长度不要超过128字符

l 应尽量综合评估查询场景,通过评估尽可能的将单列索引并入组合索引以降低所以数量,结合1,2点

l 在创建组合索引的时候,应评估索引中包含的字段,尽量将数据基数大的字段放在组合索引的前面

l 在数据量较大的时候,MongoDB 索引的创建是一个缓慢的过程,所以应当在上前线或数据量变得很大前尽量评估,按需创建会用到的索引

l MongoDB 的索引创建是库级锁,在索引创建时该集合所在库不可读写

l 特别注意基于地理位置的索引建立时会带来的问题。