0

有一个表包含超过 100,000 条与特定感兴趣标准匹配的记录。一个作业运行一次从该集合中获取 1000 条记录,并对每条记录执行一些操作。还有其他进程可能会更改此表中的记录,这可能会影响感兴趣的集合。由于这些变化,作业开始时应该在页面中的记录将不断变化。这会导致丢失某些记录或多次处理某些记录。

虽然我知道系统的设计应该避免这种情况,但在这一点上重新设计系统不是一个选择。所以,我想知道这是否是一个常见的场景,如果是,存在什么样的解决方案模式?我尝试使用谷歌搜索,但无法获得任何有意义的点击。

谢谢。

4

2 回答 2

1

一种方法是在数据库空闲时克隆数据库,然后在作业中处理副本。数据会有点过时,但如果您的数据库在您尝试访问全部内容时不断更新,那么它不可能是“最新的”。

于 2012-04-05T02:12:24.960 回答
1

假设获取 1000 条记录并对其执行计算不是一个耗时的过程,您可以将代码包装到事务中。当然,这意味着其他连接将无法同时修改感兴趣的表。他们基本上必须等到事务完成才能运行更新/插入语句。因此,如果您的代码没有花费大量时间并且其他连接的超时是合理的,那么这是一个可能的解决方案。

于 2012-04-05T02:22:53.077 回答