【问题标题】:Will performing a mongo find in for-loop cause it to crash?在 for 循环中执行 mongo find 会导致它崩溃吗?
【发布时间】:2019-08-19 20:44:17
【问题描述】:

我设置了一个爬虫,它可以爬取网站上的所有(唯一)链接,并将链接及其 body-tag 内容存储在 mongo 中。下次我抓取网站时,我需要确保只有新链接或具有更新的 body-tag 内容的链接才会被摄取以避免重复。

所以,基本上我正在填充一个新抓取的链接数组,并且对于数组中的每个链接对象,我正在执行一个
db.collection.find({:link_url = > link_url, :body => body})

在 for 循环中运行上述查找查询会导致任何障碍或崩溃吗?假设在最坏的情况下,数组的长度可能是 5000。

我尝试在一个查询中获取整个集合,但这种方法需要深度哈希匹配并且是 n^2 操作。或者它需要多次哈希重组操作以使其适合比较。

for(i<5000)
  temp = db.collection.find(i) 
end


这就是我正在实现的核心逻辑。使用 mongodb/mongoid/rails 可以吗?

【问题讨论】:

  • 我不明白这个问题,是什么阻止您编写代码并对其进行测试?
  • 我已经完成了负载测试。它似乎工作正常,没有任何问题。我想知道一般来说做这样的事情是否是一种好习惯。

标签: ruby-on-rails mongodb mongoid


【解决方案1】:

MongoDB 不会因大量查询而崩溃,但是您的爬虫可能会运行缓慢。您可以考虑使用 $in 运算符来匹配单个查询中的多个值,或者使用 $or 运算符来匹配更复杂的条件,并确保您正在执行的查询使用索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-07
    • 2020-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    相关资源
    最近更新 更多