zoukankan      html  css  js  c++  java
  • 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 发布

  • 相关阅读:
    POJ 2251 Dungeon Master
    HDU 3085 Nightmare Ⅱ
    CodeForces 1060 B Maximum Sum of Digits
    HDU 1166 敌兵布阵(树状数组)
    HDOJ 2050 折线分割平面
    HDU 5879 Cure
    HDU 1878 欧拉回路
    HDU 6225 Little Boxes
    ZOJ 2971 Give Me the Number
    HDU 2680 Choose the best route
  • 原文地址:https://www.cnblogs.com/hee0624/p/13139589.html
Copyright © 2011-2022 走看看