c# - 设计指南分布式计算

标签 c# .net system

我有一个软件系统可以同时在多台机器上执行 OCR。当前系统的工作原理如下:

  1. 所有需要ocred的文档都插入到db中的一个表中。
  2. 每个客户端 ocr 机器汇集该表,每当找到 ocr 数据时,它都会锁定表并选择 n 号。 ocr 的文件。锁定用于原子性。
  3. 每个文档被 ocred 后,文档的状态更新为完整。

我知道将数据库设置为同步位置是一个严重的错误。它运行良好,但有时我会看到数据库死锁..

所以我的问题是,设计此类系统的更好方法是什么,我希望数据库仅作为存储设备而不是同步位置。我想听听你的想法。

最佳答案

好吧,您可以在表中有一列来说明当前是否正在处理记录。在事务中,获取当前未被处理的记录的数据,并更新记录以说明它现在正在被处理。那里如何处理争用的细节将取决于您创建的事务类型和您使用的数据库,但我怀疑事务应该是它的核心。

假设您真的想要使用数据库而不是某种描述的消息队列。您可能会考虑将消息队列结合 与数据库一起使用……有些数据库内置了队列,这也很有用。即使你也想要数据库中的记录,你可以有一个只有 ID 的队列——客户端可以只从队列中拉出下一个项目,然后获取数据。您可能仍想记录从队列中提取项目的时间,以便在客户端崩溃或类似情况时,批处理作业可以放置任何失败的作业(例如,一天前提取但没有提取的作业)还没有结果)回到队列中。

关于c# - 设计指南分布式计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3819175/

相关文章:

Ruby 系统 ('ls' ) 到字符串?

vb.net - 如何使用vb.net获取电池(笔记本电脑)信息?

c# - 从 UWP 获取 TCP 服务器上的实时数据(更新)

.net - P/Invoke 和非托管 DLL 状态

c# - 在mvc中创建 View

c# - 我应该把我的代码放在 Singleton 中的什么地方?

.net - global.asax 中的错误无法执行 server.transfer

Windows系统文件哈希数据库

c# - 如何在 Blazor 服务器应用程序中正确计算 SignalR 消息?

c# - 使用 Accord.Net 的编码对象编码第二个数据集