【问题标题】:distributed crawler and consistency分布式爬虫和一致性
【发布时间】:2019-10-20 02:18:57
【问题描述】:

情况是我们有多个服务器(40+)同时抓取一个相同的 URL(以确保我们有最小的遗留)并将数据保存到数据库 (MySQL)。

现在的问题是:数据来回切换。例如,由于爬虫/数据库遗留问题,内容将在几秒钟内变为 A B A B A。

有什么好的方法可以预防吗?我们正在使用 Perl 编写爬虫,但任何语言都适合我们,因为我们可以借用背后的想法。

任何提示将不胜感激。雷迪斯?零MQ?

谢谢

【问题讨论】:

  • 这些应用程序服务器是共享同一个数据库,还是运行自己的数据库?如果存储是集中式的,那么您的一致性问题是爬虫进程需要不同的时间才能完成,因此进程 A 可能会启动,然后 B 启动并完成,然后 A 完成,然后您会得到过时的数据。如果数据有时间戳,您可以使用它来存储它以保持最新版本,或者您可以在获取完成后直接附加时间戳(以毫秒为单位)并使用它。您使用什么技术或存储并不重要。
  • 它共享同一个数据库。是的,情况是爬虫 X 可能会获取过时的数据。并且数据没有时间戳。当它完成时,我们只有那个服务器的 time() 。那么用 MySQL 存储那一秒的最佳解决方案是什么?现在我们正在使用 INSERT INTO .. ON DUPLICATE KEY UPDATE ...谢谢
  • 您正在覆盖数据,而不是单独存储每条记录?我会使用微秒的整数字段。使用 Time::HiRes 获取 microtime 并在您的 LWP 上为 respone_headersresponse_done 安装 a handler 并将 microtime 粘贴在那里。然后用它来检测哪个是最新的。

标签: mysql perl redis web-crawler data-consistency


【解决方案1】:

【讨论】:

  • 您能否在此处引用或总结文档的相关部分?就目前而言,这是一个仅限链接的答案。我会为你做的,但很遗憾,我现在无法阅读全文。
猜你喜欢
  • 2016-05-08
  • 1970-01-01
  • 2019-11-07
  • 2013-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
相关资源
最近更新 更多