V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
whereabouts
V2EX  ›  程序员

Mongo 一亿条数据的表 每次取 1 万条数据有什么好的办法吗 .skip(x).limit(10000)丢弃数据方式速度太慢了

  •  
  •   whereabouts · 2018-07-01 11:38:53 +08:00 · 3319 次点击
    这是一个创建于 2322 天前的主题,其中的信息可能已经有所发展或是发生改变。
    .skip(已取数量).limit(10000) 这样每次取 10000 条数据的方法,好像是丢弃.skip(x)里的数据然后返回 1 万条,这样的话到后来每次丢弃半个表的数据再返回 1 万条数据,速度简直停止了。。
    初用 MongoDB,求比较好的办法能够实现 [直接返回从 x 开始的 1 万条数据] 这个需求
    7 条回复    2018-07-02 13:52:14 +08:00
    yohn89
        1
    yohn89  
       2018-07-01 11:43:11 +08:00 via Android   ❤️ 2
    按照 id 增序或降序,每次记住最后一条记录的 id,下一个循环的时候,where id > lastId 来过滤掉已经取出的数据。这跟是不是 mongo 没有关系。
    kingname
        2
    kingname  
       2018-07-01 11:59:58 +08:00 via iPhone   ❤️ 1
    数据库大的时候绝对不要用 skip,因为它也是一条一条去数。你每次取一万条,记住最后一条的_id,由于_id 是单调递增的,所以下一次大于_id 再取一万条即可。
    pudgedoor
        3
    pudgedoor  
       2018-07-01 12:09:32 +08:00 via Android
    聚合然后$sample 可以吗?
    cockcry
        4
    cockcry  
       2018-07-01 20:09:09 +08:00
    这么大数据应该做分片的
    fmumu
        5
    fmumu  
       2018-07-02 09:01:25 +08:00 via Android
    skip 不行,mongodb 权威指南一书中有提到解决方案,用 id 排序,然后过滤大于上一批最大 id 的数据,再 limit
    yimity
        6
    yimity  
       2018-07-02 10:29:44 +08:00 via Android
    好像可以使用游标来解决,权威指南上也有说。
    tonghuashuai
        7
    tonghuashuai  
       2018-07-02 13:52:14 +08:00
    典型的大数据分页场景,skip(offset) limit 会废掉,应该采用游标的方式
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   942 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:58 · PVG 05:58 · LAX 13:58 · JFK 16:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.