@ivanresh

ASP.NET Core MSSQL, как быстро сохранить 50к записей?

Здравствуйте!
Мне нужно сохранить в БД 50К записей.

Краткое описание методам и объектов:

Class User
{
Virtual ICollection<Coin> Coins { get; set: }
}
Class Coin
{
Virtual IList<Transaction> Transactions {get; set;}
}

Public Task<JsonResult> GetCoins()
{
Var user = await userManager.FindByName(id);

User.Coins = await UpdateCoins();
Await context.BulkSaveChangesAsync();

Return Json(user.Coins);
}


Transaction выглядит так:
5d4b3e1271933213302975.jpeg
5d4b4416e5d5a557155960.jpeg

Суть метода UpdateCoins: Получить с другого сервиса 50к транзакций и разбить их по монетам. Т.е. В итоге после его выполнения у объекта User будет коллекция Coin размером около 150 объектов и по всем Coin будет разбито 50к объектов Transaction по листам.
Сразу же после метода GetCoins вызывается метод GetTransactions, который уже возвращает user.Coins.First().Transactions.OrderBy(t => t.Date).Reverse().Skip(offset).Take(count), например, т.е. Данные нужны будут сразу же.
После каждого вызова сервис, с которого получались 50к транзакций, может вернуть ещё их какое-то их кол-во, и значения у объектов Coin может обновиться или к ним могут ещё добавиться транзакции.

Сейчас сохранение 50к объектов в БД, занимает 1.5 минуты и CPU трудится при этом на 40%, при записи 200-300 объектов Transaction процентов на 5. Но нужно чтобы весь метод отрабатывал и возвращал значения секунд за 20-30

Прочитал что Bulk должна одним запросом отправлять все вставки

Вопрос:
-Работает ли BulkSaveChangesAsync правильно или как ускорить запись?
Нужно ли для этого может быть работать как-то напрямую с context.Transactions и использовать вручную Insert может быть, или связка user.Coins.Transactions c LazyLoading делает то же самое?
Комп 8гб 4х2.4 и SSD
  • Вопрос задан
  • 100 просмотров
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
Просто как образчик: прайс от поставщика в формате access на 0.7 миллиона позиций - oledb select * и потом после ряда трансформаций и проверок - bulk insert выполняется чуть быстрее чем тупо открытие исходного файла access'ом.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы