У меня есть почти сотня сервисов, отправляющих данные в нашу очередь сообщений. Эти данные обрабатываются службой Java и загружаются в таблицы импорта в нашем SQL Server. После загрузки данных выполняется несколько процедур, которые загружают эти данные в соответствующие таблицы. Недавно нам пришлось добавить новые экземпляры сервиса для чтения и загрузки сообщений. Было предложено изменить модель изоляции базы данных на снапшот (я не очень разбираюсь в базах данных, поэтому просто сделал то, что было предложено). К сожалению, у нас было много проблем с этим, поэтому нам пришлось дублировать таблицы импорта и вышеупомянутые процедуры - это, конечно, привело к огромному беспорядку, который я сейчас пытаюсь навести.
Мое текущее понимание таково, что была предложена изоляция моментальных снимков, чтобы службы могли работать с одной и той же таблицей без проблем и ошибок, с которыми мы столкнулись, из-за некоторого непонимания или неправильной реализации на нашей (разработчиков) стороне.
Мой вопрос: возможно ли, и если да, то как массово загружать данные в одну таблицу, преобразовывать их и загружать в целевую таблицу (все параллельно, поэтому допустим, что это делают 3 или 4 службы) в некотором роде это не вызывает взаимоблокировок или потери данных.
Наш SQL Server: Microsoft SQL Server 2014 (SP2-GDR) (KB4019093) — 12.0.5207.0 (X64)
Я не знаю намного больше, но я знаю, что, например, у нас нет поддержки секционирования или создания онлайн-индексов — может быть, это как-то поможет.





Я закончил модифицировать службы загрузки данных и импорта таблиц таким образом, чтобы каждая загружаемая запись имела свой собственный идентификатор. Также службы больше не выполняют процедуры импорта, они планируются с помощью агента SQL и запускаются один раз в минуту. Решение действительно простое, и хотя в среднем данные сохраняются в целевых таблицах через 30 секунд после их получения службами, с этим можно смириться — таким образом мы можем загрузить намного, намного, НАМНОГО больше данных.