繁体   English   中英

任何为高速批量插入提供体面方法的 ORM?

[英]Any ORMs which provide decent methods for high speed bulk inserts?

是否有任何 ORM 可以为高速批量插入提供合适的方法?

我问的原因是 Entity 框架非常适合提取数据,但如果您想以超过每秒 10 行的速度插入,则完全失败。

更新

我目前使用 DataTable 和 T-SQL 以每秒 80,000 行的速度插入,但如果我可以全面使用 ORM,它会更干净。

Blimey,4 年前问过?

出色地....

如果有人仍在此处寻找答案,Jon Wagner 的 Insight.Database(一个非常漂亮的 Micro-ORM)支持 SQL BULK INSERT。

我可以使用以下语法轻松地每秒写入 200,000 行 -

Database.Connection().BulkCopy("TableName", myListOfItemsToInsert);

那对你有用吗?

Insight.Database on GitHub

恐怕您会发现 ORM 不是每秒执行 80K 行的糟糕选择。 只是无法完成,除非您绕过 Linq 到 T-SQL 转换和 go 直接针对数据库。 但是这样你就违背了 ORM 的目的。即便如此,我也很难看到你将如何实现每秒 80K 行(尽管你没有定义每行的宽度)。

像 EF 和 Linq 到 SQL 这样的 ORM 将在每次更新时发出一个 Insert 语句。 这不利于 80K/秒的吞吐率。 IMO,您应该使用像 SSIS 这样的批量插入工具。这就是它的设计目的。

您可以使用 EF 进行后门,但使用 ORM 的常见 arguments 之一是性能。

ORM 旨在帮助提高可读性/可编码性/并减少开发时间。 如果您关心性能,请使用本机 sql。

不,这不是 ORM 的用途。 ORM 支持OLTP ,不支持批量数据处理。 使用正确的工具来完成工作。

(如果您坚持使用 ORM,请查看设置插入的批量大小。)

现在有可以实现非常接近此性能的完整 ORM,例如 Nfinity.Data ( https://www.nfinity.software ),它将在大约 2 秒内插入 80,000 行。 我刚刚测试了一个大约 5 列宽的表,包括混合数据类型。

Windows 10,i7 CPU,32 GB 内存,SQL 服务器 2017,.Net Core 3.1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM