Привет. Я работаю над проектом, в котором нам нужно обрабатывать несколько XML-файлов один раз в день и заполнять базу данных информацией, содержащейся в этих файлах.
Каждый файл занимает примерно 1 МБ и содержит около 1000 записей; нам обычно нужно обработать от 12 до 25 из этих файлов. Я видел некоторую информацию о массовых вставках с использованием NHibernate, но наша проблема несколько сложнее, так как XML-файлы содержат новые записи, смешанные с обновленными записями.
В xml есть флаг, который говорит нам, что конкретная запись является новой или обновлением существующей записи, но не то, какая информация изменилась. Записи xml не содержат нашего идентификатора БД, но мы можем использовать идентификатор из записи xml для уникального поиска записи в нашей БД.
Наша стратегия до сих пор заключалась в том, чтобы определить, является ли текущая запись вставкой или обновлением, и на основании этого мы либо выполняем вставку в БД, либо выполняем поиск, затем мы обновляем информацию об объекте информацией исходя из записи XML и, наконец, мы делаем обновление на БД.
Проблема с нашим текущим подходом заключается в том, что у нас возникают проблемы с блокировками БД, и наша производительность очень быстро падает. Мы подумали о некоторых альтернативах, таких как наличие отдельных таблиц для отдельных операций или даже отдельных БД, но выполнение такого шага будет означать большие усилия, поэтому перед любыми решениями я хотел бы спросить мнение сообщества по этому вопросу, спасибо заранее