Руководство по проектированию распределенных вычислений - PullRequest
6 голосов
/ 29 сентября 2010

У меня есть программная система, которая выполняет OCR одновременно на нескольких машинах. Текущая система работает следующим образом:

  1. Все документы, которые необходимо оформить, вставляются в таблицу в БД.
  2. Каждая клиентская машина ocr объединяет эту таблицу и всякий раз, когда для ocr обнаруживаются данные, она блокирует таблицу и выбирает n no. файлов для ocr. Блокировка используется для атомарности.
  3. После того, как каждый документ получен, статус документа обновляется как завершенный.

Я знаю, что это серьезная ошибка, чтобы сделать базу данных местом синхронизации. Он работает нормально, но иногда я вижу мертвую блокировку базы данных ..

Итак, мой вопрос: как лучше спроектировать такую ​​систему, я хочу, чтобы база данных использовалась как устройство хранения, а не как место для синхронизации. Я хочу услышать ваши мысли.

Ответы [ 2 ]

5 голосов
/ 29 сентября 2010

Хорошо, у вас может быть столбец в таблице, в котором указано, обрабатывается ли запись в данный момент.В транзакции извлеките данные для записи, которая в данный момент не обрабатывается, и обновите запись, чтобы сообщить, что она сейчас обрабатывается.Детали того, как будут обрабатываться конфликты, будут зависеть от типа транзакций, которые вы создаете, и базы данных, которую вы используете, но я подозреваю, что транзакции должны лежать в основе этого.

Это предполагает, что вы действительно хочу использовать базу данных, а не очередь сообщений с некоторым описанием.Вы можете рассмотреть возможность использования очереди сообщений в сочетании с базой данных ... и в некоторые базы данных встроены очереди, что также может быть полезно.Даже если вам нужна запись в базе данных, у вас может быть очередь только из идентификаторов - клиенты могут просто извлечь следующий элемент из очереди, а затем получить данные.Возможно, вы все еще захотите записать время, когда элемент был извлечен из очереди, чтобы в случае сбоя клиента или чего-то подобного пакетное задание могло поставить любые сбойные задания (например, те, которые были получены день назад, но непока нет результатов) назад в очередь.

2 голосов
/ 29 сентября 2010

При использовании опроса базы данных для файлов ocr лучше использовать службу сообщений Windows.Что делать, если база данных не работает, а служба ocr запущена, служба ocr не запустится до тех пор, пока служба базы данных не будет запущена, с помощью очереди сообщений Windows вы можете получить информацию для файла ocr из службы обмена сообщениями (онлайн или вне сети).line), чтобы служба ocr автоматически запускалась после того, как машина была включена, и не возникало проблем с блокировкой базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...