【发布时间】:2010-11-25 15:44:41
【问题描述】:
我试图找出在 sql 数据库中实现处理队列机制的最有效和可扩展的方法。简而言之,我有一堆带有相关“反向链接”统计信息的“域”对象。我想有效地确定哪些域需要处理其反向链接。
域表:id, domainName
Backlinks 表:id、domainId、count、checkedTime
反向链接表有许多记录(以保留历史记录)到一个域记录。 我需要有效地选择要处理其反向链接的域。这可能意味着最近 checkTime 的 Backlinks 记录在过去已经足够远,或者域记录根本没有 Backlinks 记录。处理域需要按多种因素进行排序,包括按最旧的checkedTime 优先排序。
有多个“阅读器”处理域。如果同一个域被处理两次,这不是什么大问题,但这是对 CPU 周期的浪费。
worker 处理域的时间不确定。我宁愿有一些备份,因为结帐会“过期”,而不是要求工作进程在完成时明确“签入”记录,以防工作人员因某种原因失败。
这里的大问题是缩放。从一开始,我就可以轻松拥有大约 200 万个域,而且这个数字每天都在增长。这意味着我的反向链接历史也会快速增长,因为我希望在某些情况下每天处理,而在其他情况下每周处理每个域。 问题变成了,找到需要反向链接处理的域的最有效方法是什么?
感谢您的帮助!
【问题讨论】:
-
您检查旧反向链接和不存在的反向链接的业务规则是什么?哪个更迫切需要验证?
-
在这种情况下,检查尚不存在的反向链接将被视为更高优先级...
标签: mysql sql-server tsql scaling checkout