2013-12-10 2 views
0

Рассмотрите сценарий, когда у меня есть два приложения A на Java и B. в .Net, какой пользователь базы данных SQL-сервера? Оба A и B пытаются обновить таблицу Product, у которой есть ID и Name два столбца одновременно. Что произойдет и как мы можем избежать такой ситуации.Замки для SQL Server

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

Просьба предложить.

+0

Это интересный вопрос, но он слишком широк, поскольку он стоит. Проведите некоторое исследование/кодирование/экспериментирование и попытайтесь сформулировать более конкретный вопрос, если у вас возникнут какие-либо проблемы. – Marijn

ответ

0

Обычно вы хотите синхронизировать этот вид в вашем коде приложения.

У меня было много ситуаций, подобных этому, и давая возможность DB справиться с такими сценариями гонки/условиями, не является хорошим вариантом.

В вашем случае вы можете создать третье приложение C, которое стоит в между A и B (с одной стороны) и БД (с другой стороны). Затем в C вы можете построить мелкозернистый контроль вашего доступа к БД.

0

К таймаутам вы имеете в виду тупик, где SQL Server плохо убивает «более слабое» задание (выкидывает ошибку и откатывает транзакцию).

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

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

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

Смежные вопросы