2012-07-24 13 views
4

我为我们的员工组建了一个接口,用于上传他们需要的行业统计信息的产品列表(目前一次手动执行一次) 。
然后每个产品将通过web服务api提供给我们的统计引擎。
我会回复。统计引擎将从我的api请求“下一个受害者”。PHP中的编码理论:需要引导多个队列的流量(复用)

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

我们只是打算采用简单的循环法来将流量均匀地分配到各个队列中。
复用器将抢掉清单A顶部项目,然后列表B,然后名单C依此类推,直到周围循环回列表A再次......牢记列出/队列可随时添加/删除。

我面临的问题只是概念化这个管理。
我想过将每个队列存储为一个平面文件并通过关系数据库(MySQL)管理轮换。思考如何做到相反。想到要么完全平面文件或完全关系数据库......底线,我很灵活。
无论如何,当我尝试用循环旋转的方式将一个可变的参与者列表(我刚刚从一个快速假期中恢复过来,并且我不认为我的大脑已经将它带回家了)时,我的大脑就像蒸气锁住了一样;

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

任何&所有提示/建议/建议是受欢迎的。

注意:由于来自我们统计的引擎/工具的每个请求将被隔开数秒,如果不是几分钟,我需要保持这种无状态。

+0

Add'l info:** 1)**当特定队列/列表中的最后一项发布到统计引擎时,我们的通知程序将触发通知用户他们可以查看其结果(不需要状态检查.. 好极了!!)。 ** 2)** Stat的引擎采用单一产品,运行统计并将它们加载到我们的缓存池中。 – mOrloff 2012-07-24 23:52:50

回答

0

经过一个良好的夜间睡眠,我现在有我的智慧(我希望:)。
一个简单的解决方案是针对优先级的平面文件。
每行只有一个List/Queue ID的文本文件。
饲料列表的一端,并添加其他...简单。

批评欢迎;○)

由于@Trylobot和@Chris_Henry用于反馈。

1

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

由于每个请求都成为它自己的队列,并且所有的请求队列在优先级上被认为是相等的,所以表的理想数量可能是三个。一个列出请求及其相对于另一个的优先级(以确定谁在循环中下一个)和处理状态,另一个列出每个请求的待处理的内容(列表项)和第三个表格,列出来自每个队列的处理项目的

您还需要一个执行实际处理的脚本,该脚本不是由用户请求驱动的,而是由定期执行的系统调度作业(调整为任何您所期望的范围)执行。这当然也可以在PHP中。这是您可以设置每次10个清单检查和更新的位置。

的处理会是这样的:

  1. 从最高优先级队列最多只能选择10个项目的下一组。
  2. 处理它们,完成时更新它们的数据库状态。
  3. 更新上述队列的优先级,以便它现在是最低优先级。

如果添加新队列,则会添加最低优先级。

优先级可以用整数表示。

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

+0

Thx一堆..很多组件R已经完成了。我面临的障碍仅仅是下一个项目的优先次序(不幸的是,每次有2个B 1)。正如我理解你的建议(因为它适用于我的界限),这个想法只是有一个优先事项..我喜欢它..好,简单:)。我主要关心的是更新该表中** ALL **记录的优先级值** EACH **处理记录的时间。如果我每次都要为900条记录这样做,那不会是资源上不必要的负担吗? – mOrloff 2012-07-24 23:28:18

+0

为了澄清,使用这种Priorities Tbl方法,我会优先考虑队列/列表。然后,一旦我的多路复用器知道下一个要打的列表,它将从该列表/队列中检索下一个项目。 – mOrloff 2012-07-24 23:42:48

+0

我认为选择MIN()优先级,然后用MIN() - 1 – 2012-07-25 20:08:17

0

听起来好像你正在试图执行Gearman已经做得很好的东西。对于每个上传/请求,您只需发送一份工作给Gearman服务器即可排队。

Gearman可以配置为持久性的(以防万一到了地狱),这将消除您在关系数据库中记录请求的需求。

然后,您可以根据需要启动尽可能多的工人。我知道你建议连续运行所有的工作,你仍然可以做,但你也可以并行化工作,这样,如果所有工作都是以串行方式处理的,那么你的用户就不会坐得太久了时尚。

+0

Gearman更新优先级最高的行也行得通。甜,谢谢...我会研究一下。 – mOrloff 2012-07-25 12:47:38