sql - вставить одновременно в базу данных - PullRequest
1 голос
/ 23 ноября 2011

У меня есть база данных sql server, в которой я использую хранимые процедуры для вставки новых данных из приложения. Мне интересно, что мне нужно сделать, чтобы убедиться, что правильно использовать несколько потоков для одновременного правильного / безопасного вызова хранимых процедур в моей БД.

Возможная проблема параллелизма связана с корректностью. Я вызываю несколько хранимых процедур из интерфейса уровня данных, и каждая хранимая процедура (и другая хранимая процедура, которую они вызывают) выполняет свои обновления в нескольких таблицах базы данных способами, которые могут нарушать правильность структуры таблицы, если они выполняются одновременно любым «способом чередования» (например, из SP_1 я вставляю различные элементы в Table1 или Table2 в зависимости от некоторых условий, связанных с существованием некоторого элемента y в Table2)

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

Может ли одна большая транзакция (которая включает в себя все, что делается как часть вызова интерфейса DAL) помочь мне исправить программу с точки зрения БД при наличии одновременных вставок? Я не вижу (если решение могло бы быть жизнеспособным), как это могло бы улучшить больше, чем, скажем, подход взаимного исключения, когда только один поток в данный момент мог бы сделать необходимые вставки в таблицы базы данных одновременно ...

1 Ответ

2 голосов
/ 23 ноября 2011

если выполняется одновременно любым способом чередования

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

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