Pull to refresh

Comments 3

А не смотрели какие-то готовые расширения для EF? Настраивали как-то DbContext перед запуском миграции? Например, такая настррйка QueryTrackingBehavior.NoTracking. Или при определении запроса AsNoTracking? И интересно увидеть метрики. Например, время переноса записей из таблицы одной БД в другую. Как время меняется в зависимости от количества записей в таблице или каких-то еще параметров? Общее время для переноса данных из всех таблиц.

В EF еще не завезли Bulk insert, к сожалению. Есть платный Entity Framework Extensions, но решили не использовать его по причинам платности/зарубежности.

AsNoTracking у нас используется на уровне реализации IDbReader (это есть в примерах кода).

Что касается времени выгрузки - у меня это заняло 1 сутки на 150ГиБ базу с 12 таблицами, 4 из которых по ±10,000,000 записей. Дольше всего, конечно, выгружались сами геоданные, тк они содержали маршруты для авто по всей стране и состояли из большого количества точек, да еще и конвертировались на лету из формата одной БД в другой. Пришлось даже сделать адаптивный размер батча при выгрузке, тк по 4к записей за раз с геоданными можно легко получить OutOfMemoryException. Ну и размер батча тоже влияет на скорость выгрузки.

Bulk insert можно интегрировать в EF с помощью linq2db.EntityFrameworkCore.

Sign up to leave a comment.

Articles