.NET 数据库大数据操作方案(插入、更新、删除、查询 、插入或更新)

这篇具有很好参考价值的文章主要介绍了.NET 数据库大数据操作方案(插入、更新、删除、查询 、插入或更新)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、功能介绍 

海量数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现

当列越多转换越慢,SqlSugar将转换性能做到极致,并且采用数据库最佳API

操作数据库达到极限性能,当然你如果不用sqlsugar了解一下原理也可以使用其他ORM实现

 

BulkCopy

BulkCopy是一种用于高效批量插入大量数据到数据库的技术。其原理是利用数据库系统提供的高性能数据导入接口,将数据以批量的方式一次性写入数据库,而不是逐条插入。这种方法比逐条插入要快得多,因为减少了数据库操作的次数,从而降低了系统开销

db.Fastest<DC_Scene>().BulkCopy(lstData);
db.Fastest<Order>().PageSize(100000).BulkCopy(insertObjs);
//Winfom中要用Task.Run 底层是异步实现

  

BulkUpdate

使用BulkCopy将大量数据快速导入临时表中。然后,通过表与表之间的高效操作(如UPDATE语句)进行数据更新,而不是逐条处理。这种方法降低了数据库操作的频率,减少了系统开销,从而提高了更新效率。最后,及时清理临时表,确保数据的一致性和数据库性能的稳定性。这种策略在大规模数据更新时能够显著提升性能和效率

db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList())//更新
db.Fastest<RealmAuctionDatum>().PageSize(100000).BulkUpdate(GetList())//更新 
//Winfom中要用Task.Run 底层是异步实现

  

BulkMerge (5.1.4.109)

大数据 : 插入或者更新

原理Oracle和SqlServer使用了Merge Into+BulkCopy ,其他库使用分页+BulkCopy +查询验证

db.Fastest<Order>().BulkMerge(List);
db.Fastest<Order>().PageSize(100000).BulkMerge(List); 
//Winfom中要用Task.Run 底层是异步实现

使用BulkCopy将需要更新的数据批量导入到临时表(或者使用临时内存表)中。
使用MERGE INTO语句将临时表中的数据与目标表进行比较和合并。根据需要更新的条件,判断是否执行更新操作,同时可以在MERGE INTO语句中指定需要更新的列。
通过一次性的批量操作,实现了大规模数据的高效更新,减少了数据库操作的次数,提高了性能。
这种方法结合了数据库的批量导入和灵活的条件更新,适用于需要处理大规模数据更新的场景,提供了高效、快速的数据更新解决方案。

  

BulkQuery

纯手工指定映射+Emit绑定防止类型冲突引起的装拆和拆箱并且预热后达到原生水准

db.Queryable<Order>().ToList(); //分页降低内存 适合复杂的DTO转换和导出
List<Order> order = new List<Order>(); 
db.Queryable<Order>().ForEach(it=> { order.Add(it); /*禁止这儿操作数据库因为会循环*/} ,2000);

 

BulkDelete

删除操作慢的原因包括事务处理、索引更新、并发锁定、数据量大、触发器和硬件性能等。为提高性能,可分批次删除。

db.Deleteable<Order>(list).PageSize(1000).ExecuteCommand();

  

Select INTO

表和表之间的导入,如果在同一个库中并且表已存在性能比bulkcopy要快些
Select INTO
表和表之间的导入
//例1:不同实体插入 Select Into
db.Queryable<Order>()
 //.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了   
 .Select(it=>new { name=it.name,......})            
 .IntoTable<实体2>();
   
//例2: 同实体不同表插入    
db.Queryable<Order>()
 //.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不过ID就不一样了
.IntoTable<Order>("新表名");

 

SqlBulkCopy 类

(在.NET中提供的用于高性能批量操作数据的类)结合ORM框架进行大数据插入和更新。结合 SqlBulkCopy 进行大数据处理可以提供更高的性能,下面是一些优化原则和最佳实践:

1. 使用事务:

将 SqlBulkCopy 操作放在一个数据库事务中。这样,如果插入或更新过程中发生错误,你可以回滚整个操作,确保数据的一致性。

2. 调整 BatchSize 

BatchSize 表示每个批次中的行数。根据数据库性能和网络带宽,调整批次大小以提高性能。通常情况下,使用合理的批次大小可以最大限度地减少数据库的往返次数,提高性能。

BulkCopyTimeout 表示超时时间(以秒为单位),如果在指定的时间内操作没有完成,操作将被中断。根据数据量的大小和网络条件,调整超时时间。

3. 使用临时表:
有时,将数据先插入到一个临时表中,然后执行SQL语句将数据从临时表复制到目标表,这种方法也可以提高性能。这是因为临时表可以不受约束和索引的影响,插入速度更快。
4. 注意内存使用:
在进行大数据操作时,需要注意内存的使用情况,以防止内存溢出。可以考虑分批次处理数据,避免一次性加载大量数据到内存中。
综上所述,结合使用 SqlBulkCopy 和ORM框架时,通过调整参数、合理使用事务、关闭索引和约束等方式,可以最大限度地提高大数据插入和更新的性能。

更多用法:

Nuget安装 - SqlSugar 5x - .NET果糖网文章来源地址https://www.toymoban.com/news/detail-711725.html

到了这里,关于.NET 数据库大数据操作方案(插入、更新、删除、查询 、插入或更新)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 如何使用 Python 操作 MongoDB,包括连接、插入、查询、更新和删除数据,以及进阶用法

    如何使用 Python 操作 MongoDB,包括连接、插入、查询、更新和删除数据,以及进阶用法

    MongoDB 是一种流行的 NoSQL 数据库,支持面向文档的数据存储。Python 是一种流行的编程语言,提供了许多库和工具,方便与 MongoDB 进行交互。在本文中,我们将介绍如何使用 Python 操作 MongoDB,包括连接、插入、查询、更新和删除数据,以及一些高级用法。 连接 MongoDB 在使用

    2024年02月04日
    浏览(8)
  • pycharm连接MySql数据库,新建表creat table、删除表drop table、查询表select、插入数据insert

    亲爱的小伙伴,欢迎你来为学习新的知识啦~~~ 一、安装pymysql 首先我们肯定要先在python中把能操作mySql的第三方数据库安装一下呀~ 安装方式:pip安装(你有没有安装好pip呀,可以看安装pip的相关文章进行安装好哦~) 打开我们电脑的终端,然后输入以下的命令,将我们

    2024年02月09日
    浏览(13)
  • 用SQL语句操作Oracle数据库——数据更新

    用SQL语句操作Oracle数据库——数据更新

    数据库中的数据更新操作有3种:1)向表中添加若干行数据(增);2)删除表中的若干行数据(删);3)修改表中的数据(改)。对于这3种操作,SQL语言中有3种相应的语句与之对应。接下来让我们逐一详细地了解一下。 本文我们依然使用以下三个表来进行数据更新操作:

    2024年01月19日
    浏览(9)
  • Qt QSQlite数据库插入字符串中存在单个双引号或单个单引号解决方案

    Qt QSQlite数据库插入字符串中存在单个双引号或单个单引号解决方案

    当进行数据库写入或更新时,有时会遇到存在字符串中包含单个双引号或者单引号。 在数据库中,字符串常量时需要用一对英文单引号 \\\'\\\' 或英文双引号 \\\"\\\" 将字符串常量括起来。 比如: 或 一般是使用单引号,如果是数值,则不加单引号或双引号。 但如果字符串中包含单引号

    2024年02月02日
    浏览(6)
  • .NET6使用SqlSugar操作数据库

    .NET6使用SqlSugar操作数据库

    1.//首先引入SqlSugarCore包 2.//新建SqlsugarSetup类 3.//在appsettings添加连接字符串 4.//在Program注入SqlsugarSetup类 5.//在方法中依赖注入 6.使用SqlSugar增删改查

    2024年02月13日
    浏览(11)
  • 数据库高效批量更新操作 MERGE INTO

    使用 UPDATE 批量更新大量的数据,会出现效率低下,有时候甚至卡死的情况,后面通过使用 MERGE INTO 代替 UPDATE 执行批量更新,会提升执行效率。 原理:因为 UPDATE 关联子查询写法,是选到一条做一次子查询,这种写法得更新少,走好的索引才行,MERGE 写法是执行完 ON 后一次

    2024年02月17日
    浏览(4)
  • .NET下数据库的负载均衡“经典方案”(大项目必备,建议收藏)

    .NET下数据库的负载均衡“经典方案”(大项目必备,建议收藏)

    【前言】 本文讲述的“数据库负载均衡”方案,为市面上最经典(没有之一),由.NET界 骨灰级 大佬推出。采用该技术方案的大公司,一年省下了几个亿的支出。   【正文】 支持.Net Core(2.0及以上)  与 .Net Framework(4.5及以上) 可以部署在Docker, Windows, Linux, Mac。 为了演示

    2024年02月15日
    浏览(5)
  • .NET集成DeveloperSharp操作Sql Server数据库

    支持.Net/.Net Core/.Net Framework,可以部署在Docker, Windows, Linux, Mac。 本文提供了一种结合“原生Sql+轻量级ORM”操作各类数据库的工具。 该工具几乎只使用了一个方法/函数,却实现了几乎所有的数据操作功能。 它已成功应用到了人工智能、产业互联网、智慧医疗、等多个大型项目

    2024年03月18日
    浏览(25)
  • Mysql 数据库DML 数据操作语言—— 对数据库表中的数据进行更改UPDATE 和删除DELETE

    Mysql 数据库DML 数据操作语言—— 对数据库表中的数据进行更改UPDATE 和删除DELETE

        delete语句可以有条件,也可以没有,如果没有条件的话就是删除整张表 delete不可以删除表中某一个字段的值,但是update可以; 

    2024年01月19日
    浏览(7)
  • ②【MySQL表操作】 数据库表的创建、查询、修改、删除

    ②【MySQL表操作】 数据库表的创建、查询、修改、删除

    个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 数据库表中的数据类型 : 数值类型: TINYINT :小整数 SMALLINT :大整数 MEDIUMINT :大整数,范围大于SMALLINT

    2024年02月06日
    浏览(33)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包