1

我有一些包含一些聚合数据的数据库表。他们的记录(几千个/表)由外部 .NET 应用程序定期重新计算,因此应删除旧数据并定期插入新数据。在这种情况下,更新不是一种选择。

在删除/插入之间有一个中间时间,当记录状态不一致(旧的已删除,新的尚未在表中),因此在该状态下进行选择查询会导致错误的结果。

我使用 subsonic simplerepository 来处理数据库功能。

解决/处理这种状态的最佳实践/模式是什么?

4

1 回答 1

3

我想到了三个选项:

  1. 创建一个事务,并锁定读取直到完成。这仅在进程相对较快时才有效。如果您一次处理/锁定一张表,几千条记录应该不会太糟糕——如果您锁定整个过程,那可能会很昂贵!但是如果数据是相关的,这就是你必须做的
  2. 写入表的临时版本,然后删除旧表并重命名临时表。
  3. 与上面相同,除了从临时表(不一定是 SQL 临时表,但辅助保存表就足够了)批量复制到正确的表中,首先从主表中删除。你仍然想为此使用交易。
于 2012-12-11T21:19:04.930 回答