SqlBulkCopy仍然比Dapper更快吗?

7
我在Sam Saffron的文章中找到了一篇关于使用Dapper进行批量插入的文章(That annoying insert problem getting data into the db using dapper),他在文章结尾处陈述道:
例如,如果你需要一种超快的方式将大量数据插入到SQL数据库中,那么没有什么能够击败SqlBulkCopy,你需要一个自定义的API。
这篇文章已经四年多了。
最近我偶然发现了Dapper Plus,它声称可以在2000毫秒内处理100万行数据,这似乎比我发现的许多旧性能文章中提到的SqlBulkCopy要更出色(例如此文 - Evaluating ORMs for batch data)。
遗憾的是,我的谷歌搜索未能找到这两种批量导入方法之间的更近期的性能比较。

问题:SqlBulkCopyDapper.NET还要快吗?


1
虽然它不是开源的,但鉴于性能调整wiki表明您可以自定义SqlBulkCopyOptions,我建议它的SQL Server实现是SqlBulkCopy的包装器。 - Charles Mager
我觉得你看错了库。它们也有一个标准的 ADO.NET 库。我可能链接了错误的东西。 - toadflakz
我认为它们都基于同一件事,但这是Dapper Plus的特定内容 - Charles Mager
这个使用的是 Dapper Plus - Mapper 而不是 Dapper Plus - Actions,具体请参考 https://github.com/zzzprojects/Dapper-Plus/wiki/dapper-plus-bulk-insert - toadflakz
根据介绍,它们似乎相当交织在一起:Dapper Plus Mapper允许将概念模型(实体)与存储模型(数据库)映射,并配置选项以执行批量操作。 - Charles Mager
我可能需要深入研究他们的代码来验证他们使用了什么... - toadflakz
1个回答

7

免责声明:我是项目Dapper Plus的所有者。

Dapper Plus for SQL Server/Azure在保存实体时,当实体数量足够时会使用SqlBulkCopy,在不足时则会使用SQL派生表。

本文是关于Entity Framework的,但如果您想获取更多信息,对于Dapper来说,策略是相同的:Entity Framework如何在SQL Server中进行批量插入

因此,我们的库显然不能胜过SqlBulkCopy,它具有相同的性能,但我们的库使其更易于使用。

该库还支持:

  • BulkUpdate
  • BulkDelete
  • BulkMerge

使用SqlBulkCopy和临时表技巧。


10
为了确保开发人员知道,Dapper Plus不是免费/开源的。许可证费用从每年799美元/一个开发者开始。有个承包商在没有意识到这一点的情况下使用Dapper Plus构建了一些软件。请注意,如果您安装了它,最终需要支付该价格。在我看来,它的价格与其所做的事情相比非常昂贵。 - brianc
2
谢谢你提醒我,那真的一点都不清楚。 - niico

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接