PHP中的编码理论:需要为多个队列引导流量(多路复用)

时间:2012-07-24 22:21:51

标签: php multiplexing

我正在为员工整理一个界面,上传他们需要行业统计数据的产品列表(目前一次手动执行一次)。
然后,每个产品将通过webservice api提供给我们的stat引擎 我会回复。统计引擎将从我的api请求“下一个受害者”。

用户上传的每个列表将包含50到1000个产品,并且将成为自己的队列 目前,队列/列表可能会每天添加10-20次(并通过完成删除)aprox。
如果成功,流量可能会在几个月后升级到每天700-900个列表。

我们只是计划采用简单的循环法,将流量均匀地引导到队列中 多路复用器将从列表A ,然后列表B ,然后列表C 中获取顶部项目,依此类推,直到循环回到再次列出A ...请记住,可以随时添加/删除列表/队列。

我面临的问题只是概念化管理。
我想过将每个队列存储为一个平面文件,并通过关系数据库(MySQL)管理轮换。考虑做反过来。想要完全平坦的文件或完全关系的DB ...底线,我很灵活 无论如何,当我试图通过循环旋转无条件地融合参与者的变量列表时,我的大脑只是蒸汽锁定(我刚从快节假日回来,我不认为我的大脑已经回家了;)

有人做过这样的事吗?
你是怎么处理的? 如果你不得不再做一次会有什么改进?

任何&欢迎提供所有提示/建议/建议。

注意:由于我们的stat引擎/工具的每个请求都会被隔开很多秒,如果不是几分钟,我需要保持这种无状态。

3 个答案:

答案 0 :(得分:1)

列表数据应该存储在数据库中。您的PHP端应该有一个视图,给出系统的状态,以及添加列表的表单。

由于每个请求都成为自己的队列,并且所有请求队列的优先级都相同,因此理想的表数可能为3。一个列出请求及其相对于另一个的优先级(确定循环中接下来的人)和处理状态,另一个列出内容(列表项)每个尚未处理的请求,以及第三个列表,列出每个队列中的已处理项目

您还需要一个执行实际处理的脚本,该脚本不是由用户请求驱动,而是由定期执行的系统调度作业(根据您的需要限制)。这当然也可以是PHP。您可以在此处设置10个一次列表检查和更新。

处理类似于:

  1. 从最高优先级队列中选择最多10个项目的下一组。
  2. 处理它们,完成后更新其DB状态。
  3. 更新上述队列的优先级,使其现在成为最低优先级。
  4. 如果添加了新队列,则会添加最低优先级。

    优先级可以用整数表示。

    您的用户需要耐心等待处理他们的列表,然后查看或下载结果。您可以在视图页面上为此设置自动刷新脚本。

答案 1 :(得分:0)

听起来你正试图实现Gearman已经做得很好的事情。对于每个上传/请求,您只需将作业发送到要排队的Gearman服务器即可。

可以将Gearman配置为持久性(以防万一),这样就不需要在关系数据库中记录请求了。

然后,您可以根据自己的喜好开始工作。我知道你建议连续运行所有的工作,你仍然可以做,但你也可以并行工作,这样你的用户就不会坐在那里,如果所有的工作都是连续处理的话时尚。

答案 2 :(得分:0)

经过一夜好眠,我现在对我很有智慧(我希望:) 一个简单的解决方案是优先级的平面文件 只需在每行上有一个列表/队列ID的文本文件 从列表的一端输入,然后将添加到另一端...简单。

欢迎批评; o)

感谢@Trylobot和@Chris_Henry提供反馈。