Size: a a a

🎄.NET Talks: Evergreen🎄

2020 July 15

h

hunnidolla in 🎄.NET Talks: Evergreen🎄
или это подругому делается?
источник

DB

Danil Braindead in 🎄.NET Talks: Evergreen🎄
Для бд админа ? Или в таблице Админ ?
источник

h

hunnidolla in 🎄.NET Talks: Evergreen🎄
в таблице юзер админ
источник

DB

Danil Braindead in 🎄.NET Talks: Evergreen🎄
Эээээ
источник

h

hunnidolla in 🎄.NET Talks: Evergreen🎄
в доке так и написано запустить сид дату
источник

DB

Danil Braindead in 🎄.NET Talks: Evergreen🎄
Написать update запрос, не ?
источник

h

hunnidolla in 🎄.NET Talks: Evergreen🎄
пойду гуглить
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
Я тут изобрёл офигенный класс для быстроого массового обновления в базе данных (MS SQL Server). В боевую уже неоднократно его применил, это просто окончательное решение вопроса массового обновления данных из C# приложения.
Забавно, что никто не додумался раньше, вроде.

Что делает. Берёт На входе большой массив сущностей EF.
На выходе генерирует большой SQL скрипт примерно такого содержания:

1. Объявление временной переменной табличного типа (более удобный вид временной таблицы)
2. Инсёртит туда все обновляемые строки
3. Далее конструкция Transact Sql MERGE, в качестве источника - темповая таблица из переменной, в качестве цели обновляемая таблица. Ну и условия, какая секция таблицы обновляется

По сравнению с таким обновлением через Entity Framework прирост в производительности - уровня "всё вместе работает вместо полчаса-час за пару минут", когда там под сотню тысяч строк может обновляться
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
Работает даже куда удобнее,  чем пресловутый Bulk Insert
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
И быстрее
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
ANSI SQL - это замечательно
Но иногда лучше генерить скрипт, который использует нестандартные конструкции конкретной базы данных
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
MERGE очень мощная конструкция в SQL Server
источник

АМ

Антон Маликов... in 🎄.NET Talks: Evergreen🎄
Евгений Ипатов
Я тут изобрёл офигенный класс для быстроого массового обновления в базе данных (MS SQL Server). В боевую уже неоднократно его применил, это просто окончательное решение вопроса массового обновления данных из C# приложения.
Забавно, что никто не додумался раньше, вроде.

Что делает. Берёт На входе большой массив сущностей EF.
На выходе генерирует большой SQL скрипт примерно такого содержания:

1. Объявление временной переменной табличного типа (более удобный вид временной таблицы)
2. Инсёртит туда все обновляемые строки
3. Далее конструкция Transact Sql MERGE, в качестве источника - темповая таблица из переменной, в качестве цели обновляемая таблица. Ну и условия, какая секция таблицы обновляется

По сравнению с таким обновлением через Entity Framework прирост в производительности - уровня "всё вместе работает вместо полчаса-час за пару минут", когда там под сотню тысяч строк может обновляться
источник

АМ

Антон Маликов... in 🎄.NET Talks: Evergreen🎄
Только платная она
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
>BulkMerge
Думаю, аналогично
Генерирует оптимальный для базы SQL скрипт
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
Будет свободное время, надо бы довести класс до товарного вида, в смысле из используемого на практике наколеночного решения сделать из него либу, да опубликовать на гитхабе
Сам подход показал себя очень удачным на практике, в больших базах и при больших объёмах обновления
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
Причём сделал это уже от безысходности. Когда надо было хоть как-то оптимизировать это дело, а ничего уже из голимого EF нечего было выжать
От безысходности сделал генерацию скрипта, который через темповую таблицу и MERGE обновляет большую секцию данных
И сам присел от того, насколько удачно в плане производительности вышло
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
Не жалкие проценты улучшения, и даже не в разы, а в десятки раз скорость апнулась
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
Не поверил своим глазам сначала после первых тестов на скорость
источник

ЕИ

Евгений Ипатов... in 🎄.NET Talks: Evergreen🎄
Думал что-то некорректно делает. А нет, делает ровно всё как надо с базой, только в десятки раз быстрее
источник