我正在尝试找出在SQL数据库中实现处理队列机制的最有效和可扩展的方法。简而言之,我有一堆具有关联的“反向链接”统计信息的“域”对象。我想有效地弄清楚哪些域需要处理其反向链接。

领域 桌子: id,domainname

反向链接 桌子: ID,域名,计数,检查时间

反向链接表有许多记录(以保留历史记录)到一个域记录。我需要有效地选择要处理其反向链接的域。这可能意味着过去检查时间的反向链接记录在过去已经足够了,或者根本没有反向链接记录来记录域记录。域将需要订购以通过许多因素处理,包括首先按最古老的检查时间订购。

有多个“读者”处理域。如果相同的域被处理了两倍,那并不是什么大不了的,但这是CPU周期的浪费。

工人需要不确定的时间来处理一个域。我宁愿有一些备份,因为结帐会“到期”而不是要求工作过程在完成时明确“检查”记录,以防工人出于某种原因失败。

这里的最大问题是扩展。从一开始,我将很容易拥有大约200万个域,而且这个数字将每天都在增长。这意味着我的反向链接历史的历史也将很快增长,因为我希望在某些情况下每天进行处理,而其他每周都会为每个域进行处理。问题变成了,找到需要反向链接处理的域的最有效方法是什么?

谢谢你的帮助!

有帮助吗?

解决方案

我决定以不同的方式构造事情。我没有找到需要根据几个表的标准来处理的域,而是分配了一个日期,在该日期中,每个度量标准都需要为给定域处理。这使得找到需要处理更简单的那些域。

我最终使用了批处理的想法,我发现要处理的域,将它们标记为批处理ID处理,然后将这些域返回到工作人员。完成工人后,它将返回结果,并删除批次,并且域自然会在将来再次处理。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top