Как разделить эти два процесса? - PullRequest
0 голосов
/ 29 июня 2011

У меня есть сайт asp.net, который хранит события внутри таблицы базы данных. Затем у меня есть приложение службы Windows, которое читает эти события и выполняет соответствующие действия. В настоящее время два процесса могут одновременно вставлять и удалять записи из одной и той же таблицы.

Как лучше разработать такую ​​систему, чтобы гарантировать, что они никогда не будут работать одновременно за одним столом?

Ответы [ 3 ]

1 голос
/ 29 июня 2011

Я не уверен насчет шаблона, но я бы сделал WCF-сервис и позволил обоим использовать его для доступа к данным. Затем разделите общий объект блокировки между всеми методами, которые изменяют (или читают) содержимое таблицы.

0 голосов
/ 29 июня 2011

Это может быть проблемой архитектуры больше, чем что-либо еще.

Зачем вам два процесса, которые удаляют записи?

Как правило, вам не нужны два разных процесса для CRUD-данных в одних и тех же таблицах. Одна вещь, которую вы можете сделать, это обернуть базу данных / таблицы сервисом, а затем позволить всем процессам, которым требуется работа с данными, использовать этот сервис. Затем служба может позаботиться о сериализации звонков. В любом случае, только один процесс будет работать с БД напрямую.

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

0 голосов
/ 29 июня 2011

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

Я всегда добавляю в таблицу специальный столбец, обычно «LastModified» типа «timestamp». При добавлении или вставке строки я всегда устанавливаю этот столбец.

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

Это может быть привязано к вызывающему процессу или обрабатываться в вашем сервисе.

...