1

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

表:id、domainName

反向链接表:id、domainId、count、checkedTime

Backlinks 表有许多记录(以保留历史记录)到一个域记录。我需要有效地选择要处理其反向链接的域。这可能意味着最近 checkTime 的 Backlinks 记录在过去已经足够远,或者域记录根本没有 Backlinks 记录。域需要按多种因素进行排序,包括按最旧的checkedTime 排序。

有多个“阅读器”处理域。如果同一个域被处理两次,这不是什么大不了的事,但这是对 CPU 周期的浪费。

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

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

谢谢你的帮助!

4

1 回答 1

0

我决定以不同的方式组织事情。我没有根据几个表的标准来查找需要处理的域,而是分配了一个日期,在该日期需要为给定域处理每个指标。这使得查找那些需要处理的域变得更加简单。

我最终使用了批处理的想法,在其中找到要处理的域,将它们标记为由批处理 id 处理,然后将这些域返回给工作人员。当worker完成后,它会返回结果,并且batch被删除,域自然会准备好在未来再次处理。

于 2011-01-12T14:18:23.307 回答