我有一个爬虫设置,可以抓取网站上的所有(唯一)链接,并将链接及其正文标记内容存储在mongo中。下次我抓取网站时,我需要确保只有新的链接或带有更新的body-tag内容的链接才会被摄取,以避免重复。
所以,基本上我正在填充一系列新近爬行的链接,并且我正在执行的数组中的每个链接对象 db.collection.find({:link_url => link_url,:body => body})
在for-loop中运行上面查找查询会导致任何障碍或崩溃吗?让我们说在最坏的情况下,阵列的长度可能是5000。
我尝试在一个查询中获取整个集合,但该方法需要深度哈希匹配,并且是n ^ 2操作。或者它需要多次散列重组操作才能使其适合比较。
for(i<5000)
temp = db.collection.find(i)
end
这是我正在实施的核心逻辑。用mongodb / mongoid / rails可以吗?
MongoDB不会从大量查询中崩溃,但是您的爬虫可能会运行缓慢。您可以考虑使用$ in运算符来匹配单个查询中的多个值,或者使用$或运算符来处理更复杂的条件,并确保您正在执行的查询正在使用索引。