SqlBulkCopy все еще быстрее, чем Dapper?

Я нашел статью Сэма Шаффрона о массовой вставке с помощью Dapper (Эта раздражающая проблема со вставкой данных в базу данных с помощью dapper), где он заканчивает статью утверждением:

Например, если вам нужен сверхбыстрый способ вставки большого количества данных в базу данных SQL, ничто не сравнится с SqlBulkCopy, и для этого вам понадобится собственный API.

Статье больше 4 лет.

Недавно я наткнулся на Dapper Plus, который утверждает, что может обрабатывать 1 000 000 строк за 2 000 мс, что, по-видимому, превосходит SqlBulkCopy на основе многих старых статей о производительности, которые я нашел (например, эта - Оценка ORM для пакетных данных).

Мой Google-fu, к сожалению, не смог найти более свежие сравнения производительности между этими двумя методами массового импорта.

Вопрос: SqlBulkCopy все еще быстрее, чем Dapper.NET?


person toadflakz    schedule 01.09.2016    source источник
comment
Это не открытый исходный код, но, учитывая вики по настройке производительности вы можете настроить SqlBulkCopyOptions, я бы предположил, что его реализация SQL Server является оболочкой вокруг SqlBulkCopy.   -  person Charles Mager    schedule 01.09.2016
comment
Я думаю, что вы смотрите не на ту библиотеку. У них также есть стандартная библиотека ADO.NET. Я мог неправильно связать.   -  person toadflakz    schedule 01.09.2016
comment
Я предполагаю, что все они основаны на одном и том же, но вот конкретно для Dapper Plus.   -  person Charles Mager    schedule 01.09.2016
comment
Это использует Dapper Plus — Mapper, но не Dapper Plus — действия, в частности github.com/zzzprojects/Dapper-Plus/wiki/dapper-plus-bulk-insert   -  person toadflakz    schedule 01.09.2016
comment
Согласно введению, они кажутся довольно переплетенными: Dapper Plus Mapper позволяет сопоставлять концептуальную модель (сущность) с моделью хранения (база данных) и настраивать параметры для выполнения массовых действий..   -  person Charles Mager    schedule 01.09.2016
comment
Возможно, мне придется погрузиться в их код, чтобы проверить, что они использовали...   -  person toadflakz    schedule 01.09.2016


Ответы (1)


Отказ от ответственности: я являюсь владельцем проекта Dapper Plus

Dapper Plus для SQL Server/Azure использует SqlBulkCopy под капотом, когда имеется достаточно сущностей для сохранения, в противном случае будет использоваться производная таблица SQL.

Эта статья посвящена Entity Framework, но это та же стратегия для Dapper, если вам нужна дополнительная информация: Entity Framework Как выполнить массовую вставку в SQL Server

Итак, наша библиотека явно не превосходит SqlBulkCopy, это та же производительность, но наша библиотека упрощает ее использование.

Библиотека также поддерживает:

  • Массовое обновление
  • BulkDelete
  • Массовое слияние

используя приемы SqlBulkCopy и Temporary Table.

person Jonathan Magnan    schedule 06.09.2016
comment
Просто чтобы разработчики знали, Dapper Plus не является бесплатным/открытым исходным кодом. Стоимость лицензии начинается от 799 долларов в год для одного разработчика. Подрядчик создал некоторое программное обеспечение с помощью Dapper Plus, не подозревая об этом. Просто знайте, что если вы установите это, вам в конечном итоге придется заплатить эту цену. На мой взгляд, это очень дорого для того, что он делает. - person brianc; 18.11.2020
comment
Спасибо за наводку, ВООБЩЕ непонятно. - person niico; 05.03.2021