【问题标题】:Processing web feed multiple times a day每天多次处理网络提要
【发布时间】:2010-10-07 17:04:05
【问题描述】:

好的,这里是简单的交易:我蜘蛛网络(所有类型的数据,博客/新闻/论坛),因为它出现在互联网上。然后我处理这个提要并对处理后的数据进行分析。爬虫没什么大不了的。随着互联网获取新数据,我几乎可以实时获取它。处理是一个瓶颈,它涉及一些计算量大的算法。

我正在寻求制定策略来安排我的蜘蛛。最大的目标是确保作为最终结果生成的分析尽可能多地反映最近输入的影响。开始想一想,显而易见的目标是确保数据不会堆积。我通过蜘蛛获取数据,传递给处理代码,等到处理结束,然后蜘蛛更多。这次带来了我在等待处理结束时出现的所有数据。好的,这是一个非常广泛的想法。

你们中的一些人可以分享你的想法吗,可能会大声思考。如果你是我,你会想到什么。我希望我的问题是有意义的。顺便说一下,这不是搜索引擎索引。

【问题讨论】:

  • 不太确定你在追求什么……不过听起来很有趣

标签: data-mining web-crawler


【解决方案1】:

看来您希望防止处理器远远落后于蜘蛛。我想您也希望能够扩展它。

我的建议是使用客户端/服务器 SQL 数据库实现队列。 MySQL 可以很好地用于此目的。


设计目标

  • 防止蜘蛛远远领先于处理器
  • 允许蜘蛛和处理器之间的权力平衡(保持每个忙)
  • 尽可能保持数据最新
  • 根据需要横向扩展和扩展

队列: 创建一个队列以在处理来自蜘蛛的数据之前存储它。这可以通过多种方式完成,但听起来 IO 并不是您的瓶颈。

一个简单的方法是创建一个具有这种布局的 SQL 表:

TABLE Queue
    Queue_ID int unsigned not null auto_increment primary key
    CreateDate datetime not null
    Status enum ('New', 'Processing')
    Data blob not null

# pseudo code
function get_from_queue()
    # in SQL
    START TRANSACTION;
    SELECT Queue_ID, Data FROM Queue WHERE Status = 'New' LIMIT 1 FOR UPDATE;
    UPDATE Queue SET Status = 'Processing' WHERE Queue_ID = (from above)
    COMMIT
    # end sql

    return Data# or false in the case of no records found

# pseudo code
function count_from_queue()
    # in SQL
    SELECT COUNT(*) FROM Queue WHERE Status = 'New'
    # end sql
    return (the count)

蜘蛛:

所以你有多个蜘蛛进程.. 他们每个说:

if count_from_queue() < 10:
    # do the spider thing
    # save it in the queue
else:
    # sleep awhile

repeat

这样,每只蜘蛛要么休息,要么爬行。该决定(在这种情况下)基于待处理的待处理项目是否少于 10 个。您可以根据自己的目的进行调整。


处理器

所以你有多个处理器进程.. 他们每个人都说:

Data = get_from_queue()
if Data:
    # process it
    # remove it from the queue
else:
    # sleep awhile

repeat

这样,每个处理器要么休息要么处理


总结: 无论您是在一台计算机上还是在 20 台计算机上运行此程序,队列都将提供您需要的控制,以确保所有部分同步,并且不会彼此领先太多。

【讨论】:

  • 亲爱的 gahooa,那是个好伙伴。非常整洁。我明白你的意思。我以前做过这样的事情。使用另一个表,我也可以实施审计和控制。是的,我将在集群上运行它。如果您认为您有更多要分享的内容,请添加更多内容。感谢您的回答。
  • 亲爱的 Redfrog:感谢您的评论。随着您的设计发展,请随时给我发电子邮件以获得更多反馈。本页底部的联系方式:blog.gahooa.com/about
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
相关资源
最近更新 更多