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

2018-07-01 11:38:53 +08:00
 whereabouts
.skip(已取数量).limit(10000) 这样每次取 10000 条数据的方法,好像是丢弃.skip(x)里的数据然后返回 1 万条,这样的话到后来每次丢弃半个表的数据再返回 1 万条数据,速度简直停止了。。
初用 MongoDB,求比较好的办法能够实现 [直接返回从 x 开始的 1 万条数据] 这个需求
3148 次点击
所在节点    程序员
7 条回复
yohn89
2018-07-01 11:43:11 +08:00
按照 id 增序或降序,每次记住最后一条记录的 id,下一个循环的时候,where id > lastId 来过滤掉已经取出的数据。这跟是不是 mongo 没有关系。
kingname
2018-07-01 11:59:58 +08:00
数据库大的时候绝对不要用 skip,因为它也是一条一条去数。你每次取一万条,记住最后一条的_id,由于_id 是单调递增的,所以下一次大于_id 再取一万条即可。
pudgedoor
2018-07-01 12:09:32 +08:00
聚合然后$sample 可以吗?
cockcry
2018-07-01 20:09:09 +08:00
这么大数据应该做分片的
fmumu
2018-07-02 09:01:25 +08:00
skip 不行,mongodb 权威指南一书中有提到解决方案,用 id 排序,然后过滤大于上一批最大 id 的数据,再 limit
yimity
2018-07-02 10:29:44 +08:00
好像可以使用游标来解决,权威指南上也有说。
tonghuashuai
2018-07-02 13:52:14 +08:00
典型的大数据分页场景,skip(offset) limit 会废掉,应该采用游标的方式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/467202

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX