zoukankan      html  css  js  c++  java
  • MongoDB 索引该加的都加了,还不够快。怎么办?

    索引该加的都加了,还不够快。怎么办?

    (前文)[https://github.com/no7dw/no7dw.github.io/blob/master/source/_posts/MongoDB-Best-Proactices-About-Index.md] 末尾提及过这个 索引该加的都加了,还不够快。怎么办?

    首先
    不是建立了index 就完事了. 写query 要注意:

    • table size
    • growing trend
    • cardinality (稀疏问题)

    然后决定index的选择。

    另外不是DB 每次都会选择到最优的索引,要跟进自己的实际情况去挑选(如果DB的winning plan 非最佳),使用 hint 来指定索引.

    再次
    遇到过几种case:

    • 每次从DB拿部分数据,不断for loop step ,skip & limit. -- 为了避免每次拿太多数据
    • or 定时任务, 每次从DB拿部分数据进行处理 。(例子每1 或 5分钟,拿 {status: pending} 的order 与第三方进行check 状态,以保证协调状态的一致)

    这些可以考虑是读DB 数据到cache (redis or mq), 数据推送到DB同时更新到cache。 -- 目的是为了减少DB的查询,减少DB 查询的量(次数&取的数据量)

    注意large skip limit 对DB 是有害的。参考 其他文章google 为什么不做很大的分页查询。
    DB large skip bad to use
    large skip limit 取巧法

    还碰到过,为了显示类似阅读量,销售量,每次详情、摘要,都要过来查count !!! -- 真的十分大压力。
    典型做法:

    • 另外保存一个计数器,而不在原始记录里面count
    • 存在cache中 $inc,而不再DB层进行count (原始记录写没问题)
    • 粗算法,很多业务其实不需要精确的给用户,销售量 12,345 跟 12,344 对买家是没有区别的。(但对卖家有区别, 但两者对应系统不一样了)。想想 微信阅读数 10万+ , 1.4万 的显示,而非直接显示阅读数。
  • 相关阅读:
    购物菜单
    增删改查
    第七次Android
    第七次作业
    第四次作业
    第二次作业
    第七次
    第二次作业
    第三次作业
    第六周安卓作业
  • 原文地址:https://www.cnblogs.com/no7dw/p/13628793.html
Copyright © 2011-2022 走看看