首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分布式计算设计准则

分布式计算设计准则
EN

Stack Overflow用户
提问于 2010-09-29 06:13:52
回答 2查看 326关注 0票数 6

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

  1. 所有需要ocr的文档都插入到db中的一个表中。
  2. 每个客户端ocr机器池该表,每当发现ocr的数据时,它锁定表并选择no。ocr的文件。锁定用于atomicity.
  3. After,每个文档都是for的,文档的状态被更新为完整。

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

所以我的问题是,有什么更好的方式来设计这样的系统,我希望数据库只是一个存储设备,而不是一个同步的地方。我想听听你的想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-29 06:21:02

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

这是假设您确实希望使用数据库,而不是某种描述的消息队列。您可以考虑将消息队列与数据库结合使用.而且一些数据库中也内置了队列,这也可能是有用的。即使您也希望数据库中的记录,您也可以有一个队列的in客户端可以只是从队列中的下一个项目,然后获取数据。您可能仍然希望记录从队列中提取项目的时间,以便如果客户端崩溃或类似的事情,批处理作业可以将任何失败的作业(例如,一天前捡到的作业,但还没有结果)放回队列中。

票数 5
EN

Stack Overflow用户

发布于 2010-09-29 06:38:09

通过对ocr文件使用数据库轮询,最好使用windows消息传递服务。如果数据库关闭,ocr服务正在运行,ocr服务将在数据库服务启动之前无法启动,除非数据库服务启动,否则使用windows消息传递队列,您可以从消息传递服务(联机或脱机)中获取ocr文件的信息,以便ocr服务在机器启动后自动启动,并且不会出现数据库上的死锁问题。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3819175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档