我有一个软件系统,可以同时在多台机器上执行OCR。目前的系统工作如下:
我知道,将数据库设置为同步位置是一个严重的错误。它运行得很好,但有时我可以看到数据库上的死锁。
所以我的问题是,有什么更好的方式来设计这样的系统,我希望数据库只是一个存储设备,而不是一个同步的地方。我想听听你的想法。
发布于 2010-09-29 06:21:02
好的,您可以在表中有一个列,它显示记录是否正在被处理。在事务中,获取当前未被处理的记录的数据,并更新记录以表明它正在处理中。在那里如何处理争用的细节将取决于您创建的事务类型和您使用的数据库,但我怀疑事务应该是它的核心。
这是假设您确实希望使用数据库,而不是某种描述的消息队列。您可以考虑将消息队列与数据库结合使用.而且一些数据库中也内置了队列,这也可能是有用的。即使您也希望数据库中的记录,您也可以有一个队列的in客户端可以只是从队列中的下一个项目,然后获取数据。您可能仍然希望记录从队列中提取项目的时间,以便如果客户端崩溃或类似的事情,批处理作业可以将任何失败的作业(例如,一天前捡到的作业,但还没有结果)放回队列中。
发布于 2010-09-29 06:38:09
通过对ocr文件使用数据库轮询,最好使用windows消息传递服务。如果数据库关闭,ocr服务正在运行,ocr服务将在数据库服务启动之前无法启动,除非数据库服务启动,否则使用windows消息传递队列,您可以从消息传递服务(联机或脱机)中获取ocr文件的信息,以便ocr服务在机器启动后自动启动,并且不会出现数据库上的死锁问题。
https://stackoverflow.com/questions/3819175
复制相似问题