![]() |
1
7
我建议阅读并内化 Using tables as Queues . 如果将数据用作队列,则 必须 正确组织排队操作。我链接的文章详细介绍了如何做到这一点,您拥有的是挂起队列的变体。
你必须彻底摆脱的一件事是随机性。如果有一件事很难在查询中重现,那就是随机性。
而是使用挂起处理日期。使用我在链接文章中所展示的技术,让队列按处理日期列(当项目需要重试时)进行组织(集群)和出列。如果要重试,出列应该
推迟
而不是删除它。
|
![]() |
2
2
最明显的方法是添加一列
我不会一次检索100个订单,在线程到达数据库之前,数据库中的第50个订单可能会发生更改。得到一份订单,完成后,得到下一份。 另外,我最初开发的过程没有多线程。检查未结订单的速度通常足以按顺序完成。 |
![]() |
3
0
您可能需要考虑的一个策略是这样的一个表; jobid bigint pk不为空,workerid int/nvarchar(max)为空 其中worker是正在处理它的服务器的ID/名称,如果没有人接收到作业,则为空。当服务器接收到一个作业时,它将自己的ID/名称放入该列中,该列指示其他人不要接收该作业。 一个问题是,工作任务的服务器可能崩溃,使任务永远无法完成。您可以添加一个表示超时的日期列,该列是在工作人员将作业提取到现在+您认为合适的时间跨度时设置的。 编辑:忘记提了,您要么需要删除到作业完成时,或有一个状态字段指示完成。另外一个字段可以指示使作业表通用的作业参数:即,不要只是为订单制定解决方案,而是创建一个可以处理将来需要的任何内容的作业管理器。 |
![]() |
Duvan · 将逗号(,)替换为点(.)[副本] 2 年前 |
![]() |
Mateen Bagheri · 选择表的计数并选择其自身 2 年前 |
![]() |
SoT · SQL Server中求和函数的工作方式 2 年前 |
![]() |
NKAT · 将列值聚合到列表中会产生错误 2 年前 |
![]() |
deanpillow · 返回两列中有一个匹配值的记录 2 年前 |
![]() |
snowflakes74 · 在Dapper中异步查询多个结果 3 年前 |