mongo 分页优化问题求教 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
a627795061
V2EX    MongoDB

mongo 分页优化问题求教

  •  
  •   a627795061 2020 年 3 月 1 日 via iPhone 8300 次点击
    这是一个创建于 2162 天前的主题,其中的信息可能已经有所发展或是发生改变。
    看到 mongodb 的 skip 数据量大后会慢,如果排序字段是 id,或者是以时间排序,排序字段值唯一可以用 find 代替 skip。但如果我的排序字段不是 id 甚至字段值不唯一呢,怎么能用 find 代替 skip 分页?那还是绕不开 skip 吗?
    8 条回复    2020-03-02 11:12:46 +08:00
    a627795061
        2
    a627795061  
    OP
       2020 年 3 月 1 日 via iPhone
    @lbfeng 老哥,你这个方案就是我说的 find 代替 skip,但前提是用 id 排序,但我的问题是不是 id 排序的情况下,而且排序字段的值有可能相等
    Vegetable
        3
    Vegetable  
       2020 年 3 月 1 日
    这个不是 mongodb 的问题,mysql 用 offset limit 在 offset 够大的时候一样要面对这个问题,这个逻辑本身没有通用的解决办法。你想知道某个排序条件下第 10000 个到 10010 个记录分别是谁,必须要先把前 9999 条记录都排出来。
    从你的描述可以看出来你应该看过官方文档的分页实现建议了,如果你的业务模型足够清晰的话,也许有办法通过别的手段优化 skip 比较大时的性能,不过这个很多时候是没那么必要的,具体还是看你业务
    a627795061
        4
    a627795061  
    OP
       2020 年 3 月 1 日 via iPhone
    @lbfeng 老哥,你这个方案就是我说的 find 代替 skip,但前提是用 id 排序,但我的问题是不是 id 排序的情况下,而且排序字段的值有可能相等
    @Vegetable 是的,但是业务就是排序字段可以任选
    fmumu
        5
    fmumu  
       2020 年 3 月 1 日 via Android
    限制只能查前一万条记录
    huang7230468
        7
    huang7230468  
       2020 年 3 月 1 日
    目前我们也是在用 mongo:
    我们主要有以下措施:
    1、条件,我们应该利用条件来尝试将尽可能的 documents 的数量减少;
    2、如果是数据非常多,几百万、几千万,那么应该考虑集群分片;
    3、重新审视目标 collection 的 Index,是否合理?
    4、甚至可以考虑 SSD ;
    最后,问下,你们目前大概是多少数据呀?如果说只有几万条,理论上讲应该不会有问题;
    itskingname
        8
    itskingname  
       2020 年 3 月 2 日
    MongoDB 自动生成的_id 是一个排序递增的字段,可以直接通过它来搜索和分页。记录上一次的_id,第二次搜索的时候大于_id 就好了。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     845 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 21:49 PVG 05:49 LAX 13:49 JFK 16:49
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86