我正在为员工整理一个界面,上传他们需要行业统计数据的产品列表(目前一次手动执行一次)。
然后,每个产品将通过webservice api提供给我们的stat引擎
我会回复。统计引擎将从我的api请求“下一个受害者”。
用户上传的每个列表将包含50到1000个产品,并且将成为自己的队列
目前,队列/列表可能会每天添加10-20次(并通过完成删除)aprox。
如果成功,流量可能会在几个月后升级到每天700-900个列表。
我们只是计划采用简单的循环法,将流量均匀地引导到队列中 多路复用器将从列表A ,然后列表B ,然后列表C 中获取顶部项目,依此类推,直到循环回到再次列出A ...请记住,可以随时添加/删除列表/队列。
我面临的问题只是概念化管理。
我想过将每个队列存储为一个平面文件,并通过关系数据库(MySQL)管理轮换。考虑做反过来。想要完全平坦的文件或完全关系的DB ...底线,我很灵活
无论如何,当我试图通过循环旋转无条件地融合参与者的变量列表时,我的大脑只是蒸汽锁定(我刚从快节假日回来,我不认为我的大脑已经回家了;)
有人做过这样的事吗?
你是怎么处理的?
如果你不得不再做一次会有什么改进?
任何&欢迎提供所有提示/建议/建议。
注意:由于我们的stat引擎/工具的每个请求都会被隔开很多秒,如果不是几分钟,我需要保持这种无状态。
答案 0 :(得分:1)
列表数据应该存储在数据库中。您的PHP端应该有一个视图,给出系统的状态,以及添加列表的表单。
由于每个请求都成为自己的队列,并且所有请求队列的优先级都相同,因此理想的表数可能为3。一个列出请求及其相对于另一个的优先级(确定循环中接下来的人)和处理状态,另一个列出内容(列表项)每个尚未处理的请求,以及第三个列表,列出每个队列中的已处理项目。
您还需要一个执行实际处理的脚本,该脚本不是由用户请求驱动,而是由定期执行的系统调度作业(根据您的需要限制)。这当然也可以是PHP。您可以在此处设置10个一次列表检查和更新。
处理类似于:
如果添加了新队列,则会添加最低优先级。
优先级可以用整数表示。
您的用户需要耐心等待处理他们的列表,然后查看或下载结果。您可以在视图页面上为此设置自动刷新脚本。
答案 1 :(得分:0)
听起来你正试图实现Gearman已经做得很好的事情。对于每个上传/请求,您只需将作业发送到要排队的Gearman服务器即可。
可以将Gearman配置为持久性(以防万一),这样就不需要在关系数据库中记录请求了。
然后,您可以根据自己的喜好开始工作。我知道你建议连续运行所有的工作,你仍然可以做,但你也可以并行工作,这样你的用户就不会坐在那里,如果所有的工作都是连续处理的话时尚。
答案 2 :(得分:0)
经过一夜好眠,我现在对我很有智慧(我希望:) 一个简单的解决方案是优先级的平面文件 只需在每行上有一个列表/队列ID的文本文件 从列表的一端输入,然后将添加到另一端...简单。
欢迎批评; o)
感谢@Trylobot和@Chris_Henry提供反馈。