MongoDB命名规范

命名规范

文档

设计约束

  • UTF-8 字符
  • 不能包含 \0 字符(空字符),这个字符标识建的结尾
  • . 和 $ 有特殊含义,需要避免
  • 区分大小写
  • 键不能重复
  • 键/值对有序

实践约束

  • 【强制】文档中的key禁止使用_以外的特殊字符
  • 【强制】key全部小写,多个单词可以下划线分割
  • 【强制】禁止使用数字打头的key
  • 【强制】禁止自定义_id(_id一般自增,使用无序id极有可能降低写入性能)
  • 【建议】相似类型文档放在一个集合中,能大幅提高索引利用率
  • 【建议】若业务上对于存放数据大小写不敏感,则使用全部大写/小写存放(或者增加一个统一了大小写写的辅助字段)。使用忽略大小写的查询极其耗费性能
  • 【建议】不要存放太长的字符串

TIPS
MongoDB索引仅支持1KB以内的字段

集合

设计约束

  • UTF-8 字符
  • 不能是空字符串("")
  • 不能包含 \0 字符(空字符),这个字符标识集合名的结束
  • 不能以 “system.” 开头,这是为系统保留的前缀
  • 不在集合中包含字符 “$”
  • 使用 “.” 来分隔不同命名空间的子集合,如一个博客可能包含两个子集合,blog.posts和blog.authors,而blog本身可以不存在

实践约束

  • 【强制】禁止使用_以外的特殊字符
  • 【强制】集合名称不超过64字符
  • 【强制】集合名称全部小写
  • 【强制】禁止使用数字打头的集合名,禁止使用system打头的集合名(system为系统集合前缀)
  • 【建议】为了避免库级锁带来的问题,应尽量对写入较大的集合使用“单库单集合”的结构,所以对于新增业务应尽量创建新库,而不是在现有库中创建新集合

数据库

设计约束

  • UTF-8 字符
  • 不能是空字符串("")
  • 基本上只能使用 ASCII 中的字母和数字。不能含有 /、\、.、"、*、<、>、:、|、?、$、(空格)、\0(空字符)
  • 全部使用小写。(支持大写,不建议使用)
  • 不超过64字节
  • 存在保留数据库如:admin、local、config

TIPS
数据库名称限制主要是由于数据库最终会变成文件系统里的文件,而数据库名就是相应的文件名,因此才有很多约束

实践约束

  • 【强制】数据库名称全部小写
  • 【强制】数据库名称不超过64字符
  • 【强制】禁止使用_以外的特殊字符
  • 【强制】禁止使用数字打头的数据库名
  • 【强制】禁止与保留的数据库重名,如:admin,local,config等

索引

  • 【强制】索引名称长度不超过128字节
  • 【强制】禁止在数组字段上创建索引
  • 【强制】创建组合索引时,尽量将数据基数大(唯一值多的数据)的字段放在组合索引前面

查询

  • 【建议】先做等值查询,再做排序,再做范围查询
  • 【建议】查询中的某些 $ 操作符可能会导致性能低下,尽量避免

TIPS
n e , ne, nenot, e x i s t s , exists, existsnin,$or,尽量在业务中不要使用
$exist:因为松散的文档结构导致查询必须遍历每一个文档
$ne:如果当取反的值为大多数,则会扫描整个索引
$not:可能会导致查询优化器不知道应当使用哪个索引,所以会经常退化为全表扫描
$nin:全表扫描
$or:有多少个条件就会查询多少次,最后合并结果集,所以尽可能的使用 $in

命名空间

  • 将数据库名添加到集合前,得到集合的完全限定名,称为命名空间(namespace),如cms数据库的blog.posts集合,命名空间即为:cms.blog.posts。实际使用中命名空间长度不得超过100字节

参考资料

  • MongoDB权威指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值