1. 背景
我们有个业务需求,需要将爬取到的网页做数据清理放到搜索引擎solr中。
- 将mongodb 中的数据分页读取
- 并通过一定的业务规则做数据转换成 搜索引擎solr 中所需的对象
- 向solr中批量添加数据建索引
但出现以下几个问题
- 清理过程中GC特别频繁,最终导致OOM
- 线程继续打印,前后都没有日志。但是不继续运行了
2. demo代码
我们有100w条数据,我们需要将这些数据每100条分为一组放在子线程中做清理操作。
...大约 8 分钟
我们有个业务需求,需要将爬取到的网页做数据清理放到搜索引擎solr中。
但出现以下几个问题
我们有100w条数据,我们需要将这些数据每100条分为一组放在子线程中做清理操作。
项目中有个需求是将爬虫爬取到的网页数据(存放在mongodb), 做数据清理后放入搜索引擎(solr)中。总共350w的网页数据,如果按正常速度同步10个小时即可完成。但我们实际测试发现,随着时间推移,同步时间越来越长,挂了一天只同步了100w数据。且后面越来越慢。领导找到我,让我帮忙排查解决
通过查阅资料了解到
虽然MongoDB提供了skip()和limit()方法。看起来,分页已经实现了,但是官方文档并不推荐,说会扫描全部文档,然后再返回结果。