我需要使用表实现一个队列。业务需求是有一个队列,5-10 个盒子可以访问该队列以获取下一个作业/作业。每天的工作岗位不会超过 5000 个。此外,一批作业应该一次“出队”。
只是想知道我以前没有做过的问题领域和问题是什么。如果有人以前遇到过这个/做过这个,请您指出一个设计/示例实现或需要注意的问题。
谢谢
我需要使用表实现一个队列。业务需求是有一个队列,5-10 个盒子可以访问该队列以获取下一个作业/作业。每天的工作岗位不会超过 5000 个。此外,一批作业应该一次“出队”。
只是想知道我以前没有做过的问题领域和问题是什么。如果有人以前遇到过这个/做过这个,请您指出一个设计/示例实现或需要注意的问题。
谢谢
有很多通用的队列或消息服务。即使您想实现自己的系统,您也可以尝试查看其他一些系统。首先想到的是带有Apache ActiveMQ、OpenJMS或JBoss Messaging等实现的 JMS( Java 消息服务)。然后你也有很多非开源产品。
想到的第二件事是Amazon Simple Queue Service。有几个产品实现了相同的接口,比如django-queue-service。
祝你好运 !
问题领域:
当然还有这个:
快乐编码!
这听起来不太难。只需包含一个时间戳,您可以在输入作业时对其进行排序。根据数据库,可以使用当前时间戳自动填充此字段。
在获取作业时,只需将 SELECT 和 DELETE 语句放入事务中即可。如果你觉得这不舒服,这样的事情可能会做到:
UPDATE tblQueue SET mark = <unique application id> WHERE mark IS NULL ORDER BY timestamp ASC LIMIT 1
SELECT * FROM tblQueue WHERE mark = <unique app id>
DELETE FROM tblQueue WHERE mark = <unique app id>
通过使用此设置,您可以避免交易,如果它们吓到您。
您对批次的定义有些不清楚;如果您只是说我应该能够一次处理 10 个项目,只需将第一个查询的 LIMIT 1 子句更改为 LIMIT 10。
如果您的意思是可以对作业进行分组,您可能需要一个作业队列,并将子项放在另一个表中(那不是队列,只是一个具有指向作业项的外键的常规表)。
谢谢维加德。
但是,如果执行作业的系统失败/崩溃,您建议的方法将导致作业请求丢失。
我正在考虑一个包含以下列的队列表
我可以编写一个存储过程[GetNextItemsInQueue]
,它返回一个让我们说 10 个请求的列表,设置锁定者和锁定时间。如果 Locked Time 增加了指定的限制,则可以将记录放回 Pending 状态。
这个有问题吗?