首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >最优化的存储爬虫状态的方式?

最优化的存储爬虫状态的方式?
EN

Stack Overflow用户
提问于 2009-11-13 22:10:19
回答 2查看 510关注 0票数 4

我目前正在编写一个网络爬虫(使用python框架scrapy)。

最近,我不得不实现一个暂停/恢复系统。

我实现的解决方案是最简单的一种,基本上,在它们被调度时存储链接,并在它们实际被处理时将它们标记为“已处理”。

因此,我能够获取这些链接(显然,存储的不仅仅是URL、深度值、链接所属的域,等等)当恢复爬虫时,到目前为止一切运行正常。

现在,我一直在使用mysql表来处理这些存储操作,主要用于快速原型设计。

现在我想知道如何优化这一点,因为我认为数据库不应该是这里唯一可用的选择。所谓优化,我的意思是,使用一个非常简单和轻量级的系统,同时仍然能够在短时间内处理大量写入的数据

目前,它应该能够处理几十个域名的爬行,这意味着每秒存储几千个链接……

提前感谢您的建议

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-13 23:39:50

持久化数据的最快方法通常是将它们追加到日志中--这种完全顺序的访问模式最大限度地减少了磁盘寻道,而磁盘寻道通常是存储时间开销的最大部分。在重新启动时,您将重新读取日志并重新构建内存结构,这些内存结构也是在最初添加到日志时动态构建的。

您的特定应用程序可以进一步优化,因为它不一定需要100%的可靠性--如果您由于突然崩溃而错过了几个条目,那么,您只需再次抓取它们。因此,您的日志文件可以缓冲,不需要过度fsync。

我想搜索结构也适合内存(如果它只适用于几十个站点,您可能只需要保留一个包含所有URL的集合,不需要bloom filters或任何花哨的东西) --如果不是这样,您可能只需要在内存中保留一组最近的条目,并定期将该集合转储到磁盘中(例如,将所有条目合并到一个Berkeley DB文件中);但我不打算详细介绍这些选项,因为看起来您并不需要它们。

票数 4
EN

Stack Overflow用户

发布于 2009-11-13 22:43:55

在PyCon 2009上有一个演讲,你可能会觉得有趣,比尔·格里布尔的Precise state recovery and restart for data-analysis applications

保存应用程序状态的另一种快速方法可能是使用pickle将应用程序状态序列化到磁盘。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1729427

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档