У меня есть программная система, которая выполняет OCR на нескольких машинах одновременно. Текущая система работает следующим образом:Рекомендации по проектированию Распределенные вычисления
- Все документы, которые должны быть сделаны, вставляются в таблицу в db.
- Каждый клиентский ocr-пул объединяет эту таблицу и всякий раз, когда данные найдены для ocr, он блокирует таблицу и выбирает n нет. файлов для ocr. Блокировка используется для атомарности.
- После того, как каждый документ снят, статус документа будет обновлен как завершенный.
Я знаю, что это серьезные ошибки, связанные с установкой базы данных в качестве места синхронизации. Он работает нормально, но иногда я могу видеть мертвую блокировку в базе данных.
Так что мой вопрос: какой лучший способ создать такую систему, я хочу, чтобы база данных как хранилище была не только местом синхронизации. Я хочу услышать ваши мысли.
Спасибо за ваш быстрый ответ, я на самом деле сделал то же, что вы упомянули в своем первом параграфе. Но я не удовлетворен этим решением. – crypted
@ Int3: Почему бы и нет? Я не предлагаю держать транзакцию открытой при обработке данных - просто отмечая ее как находящуюся в процессе. –