• MongoDB规约


    MongoDB规约

    作者:陈贺

    邮箱:hee0624@163.com

    一. 文档规约

    1. 【强制】库名、集合名和字段名必须使用小写字母或数字或下划线,禁止出现数字和下划线开头。数据库字段名修改代价很大,所以字段名称需要慎重考虑。
    2. 【强制】库名和集合名不使用复数名词。

    说明:集合名应该仅仅表示集合里面的文档内容,不应该表示数量。

    1. 【强制】禁用保留字,如update,find,find_one,set,push,sort等,请参考MongoDB官方保留字。
    2. 【强制】表达是与否概念的字段,必须使用is_xxx的方式命名。
    3. 【强制】文档中必备三个字段:_id, create_time,uptime_time。其中_id为主键,自动创建,禁止向_id中写入自定义内容。

            说明:id是MongoDB中的默认主键,一旦_id的值为非自增,当数据量达到一定程度之后,每一次写入都可能导致主键的二叉树大幅度调整,这将是一个代价极大的写入, 所以写入就会随着数据量的增大而下降,所以一定不要在_id中写入自定义的内容。

    1. 【推荐】文档名的命名最好遵循“业务名称_文档的作用”

    二. 索引规约

    1. 【强制】MongoDB 的组合索引使用策略与 MySQL 一致,遵循“最左原则”。

            说明:A、B、C组合索引覆盖了(A)、(A,B)、(A,B,C)三个索引。

    1. 【强制】唯一索引名为uk_字段名;普通索引名为idx_字段名;联合索引名为un_字段名缩写_字段名缩写。索引名称长度不要超过128字符;

            说明:-- 创建索引的完整方法

    db.collection.createIndex(keys , options) options: backgroud <boolean>;unique <boolean>;name <string>

    1. 【强制】单个集合索引个数不能超过64个。

            说明:索引加速查询性能,但会降低写入操作,每个index都应该被查询使用,定期检查无用索引。

    1. 【强制】创建索引要在后台创建,避免阻塞业务和查询。
    2. 【推荐】 创建索引建议:先做等值查询,在做排序,在做范围查询。

    三. 语句规约

    1. 【强制】查询中的某些 $ 操作符可能会导致性能低下,如 $ne,$not,$exists,$nin,$or,尽量在业务中不要使用。

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

    1. 【强制】查询结果,按需project字段。不要返回所有结果。
    2. 【推荐】如果需要清理掉一个集合中的所有数据,那么 remove() 的性能是非常低下的,该场景下应当使用 drop()。
    3. 【推荐】避免使用skip略过大量的结果。

            说明:当数据量大时候,寻找不适用skip的情况 下使用分页。

    正例:var page1 = db.foo.find().sort({"date":-1}).limit(100)

    ​ 然后利用最后一个文档中“date”的值作为查询条件,获取下一页;

    var page2 = db.foo.find({"date": {"$gt": latest.date}});
    page2 = page2.sort({"date": -1}).limit(100);
    

    反例:

    var page1 = db.foo.find(criteria).limit(100);
      var page2 = db.foo.find(criteria).skip(100).limit(100);
    

    本文由博客群发一文多发等运营工具平台 OpenWrite 发布

  • 相关阅读:
    安全事件关联分析方法
    网络安全公开数据集
    2019年汽车网络安全
    基于知识图谱的APT组织追踪治理——实践性比较强
    Hutool中常用的工具类和方法
    阿里云短信服务
    Java8实现List转Map
    centos下安装nodejs
    微信小程序,联系客服
    mysql空闲连接
  • 原文地址:https://www.cnblogs.com/hee0624/p/13139589.html
Copyright © 2020-2023  润新知