任何ORM,为高速批量插入件提供体面的方法
本文关键字:体面 方法 插入 ORM 高速批 任何 | 更新日期: 2023-09-27 18:00:32
是否有任何ORM为高速批量插入提供了不错的方法?
我问的原因是Entity框架在提取数据方面非常出色,但如果你想以每秒10行以上的速度插入,它就完全失败了。
更新
我目前使用DataTable和T-SQL以每秒80000行的速度插入,但如果我可以全面使用ORM,它会更干净。
恐怕您会发现ORM是一个每秒执行80K行的糟糕选择。除非您绕过Linq到T-SQL的转换并直接针对数据库,否则这是不可能实现的。但你正在破坏ORM的目的。即使在那时,我也很难想象你将如何实现每秒80K行(尽管你没有定义每行的宽度)。
像EF和Linq-to-SQL这样的ORM每次更新都会发出一个Insert语句。这不利于80K/秒的吞吐率。IMO,您应该使用像SSIS这样的大容量插入工具。这就是它的设计初衷。
Blimey,4年前被问到?
嗯。。。。
如果有人还在这里寻找答案,Jon Wagner的Insight.Database(一个非常漂亮的Micro ORM)支持SQL BULK INSERT。
我可以使用以下语法轻松地每秒写入200000行-
Database.Connection().BulkCopy("TableName", myListOfItemsToInsert);
这对你有用吗?
Insight。GitHub 上的数据库
您可以使用EF进行后门,但反对使用ORM的常见论点之一是性能。
ORM旨在帮助可读性/可编码性/并减少开发时间。如果您关心性能,请使用本机sql。
不,这不是ORM的作用。ORM支持OLTP,而不是批量数据处理。使用适合作业的工具。
(如果您坚持使用ORM,请考虑设置插入的批量大小。)
现在有完整的ORM可以实现非常接近这种性能,比如Nfinity.Data(https://www.nfinity.software),它将在大约2秒内插入80000行。我刚刚针对一个大约5列宽的表进行了测试,其中包括多种数据类型。
Windows 10,i7 CPU,32 GB RAM,SQL Server 2017,.Net Core 3.1