0

我有一个客户端-服务器进程,在服务器端长时间运行(2-5 分钟)后,要求用户确认或更改操作结果。

用户可能需要一个小时或更长时间来检查服务完成的工作,进行更改并将其发送回服务。

在一个完美的世界中,没有人会更改服务用于构建操作结果的下划线源数据。但这不是一个完美的世界!

如何锁定以防止损坏我的源数据?我不想要 SQL 表锁定...我正在考虑一种软件机制,例如内存表,其中包含我的所有操作请求和一些互锁条件,以便进入可能损坏其他操作数据的等待状态操作。

还有其他提示吗?

编辑

有关该过程的更多信息可能是必要的..

我有一个带时间戳的实体,它代表电网拓扑的时间点。该实体包含所有未通电的元素的列表。

服务器进程在调用时必须获取所有尚未处理的实体,并为每个元素创建一个列表

public class ElementRecord{
public string ElementName {get;set;}
public DateTime OffTimeStamp {get;set;}
public DateTime OnTimeStamp {get;set;}
}

基于一些业务规则,服务器进程聚合元素并等待用户确认或更改。

问题是实体加载后,真实网络会发生变化,表也会发生变化;同样在一个时间点内,更多的元素可以断电,因此服务器进程必须失效。如果用户 UI 已经在更改数据,我必须尽快提醒某些数据可能无效。

你会做什么?

4

2 回答 2

0

我在过去的一个项目中遇到过类似的要求。我们的解决方案是:在服务器完成所有操作后,我们将需要用户确认的所有数据复制到一些临时数据表中,每行都有时间戳。然后,发邮件给用户要求确认,确认后将临时数据表合并到我们的真实数据表中。我们无法锁定任何数据表,因为其他用户需要在线更改表。

于 2011-11-04T09:26:39.870 回答
0

如何在您的表中添加一个额外的列以显示数据已经过验证。

然后忽略没有验证字段集的数据。在遗留系统中,这意味着创建新表并迁移数据,但之后您需要确保只有设置了已验证字段的结果才会返回到您的代码中。

编辑

我的建议是读取数据的进程只能使用经过验证的数据。如果您的用户进程正在使用和更改已验证的数据,则它必须在检索时将数据设置为未验证,但如果该数据已标记为未验证,则无法检索该数据。

对于新数据,您只需使用默认数据创建一个新行并在验证新数据之前取回行索引。然后,您的代码具有索引,因此用户可以花很长时间来验证数据,如果他们没有,那么您拥有索引,以便您可以删除已创建的数据。

于 2011-11-04T09:27:21.540 回答