LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

【C#】.NET 數(shù)據(jù)庫(kù)大數(shù)據(jù)方案(插入、更新、刪除、查詢 、插入或更新)

admin
2024年3月26日 18:37 本文熱度 844

功能介紹

海量數(shù)據(jù)操作ORM性能瓶頸在實(shí)體轉(zhuǎn)換上面,并且不能使用常規(guī)的Sql去實(shí)現(xiàn)

當(dāng)列越多轉(zhuǎn)換越慢,SqlSugar將轉(zhuǎn)換性能做到極致,并且采用數(shù)據(jù)庫(kù)最佳API

操作數(shù)據(jù)庫(kù)達(dá)到極限性能,當(dāng)然你如果不用sqlsugar了解一下原理也可以使用其他ORM實(shí)現(xiàn)

BulkCopy

BulkCopy是一種用于高效批量插入大量數(shù)據(jù)到數(shù)據(jù)庫(kù)的技術(shù)。其原理是利用數(shù)據(jù)庫(kù)系統(tǒng)提供的高性能數(shù)據(jù)導(dǎo)入接口,將數(shù)據(jù)以批量的方式一次性寫(xiě)入數(shù)據(jù)庫(kù),而不是逐條插入。這種方法比逐條插入要快得多,因?yàn)闇p少了數(shù)據(jù)庫(kù)操作的次數(shù),從而降低了系統(tǒng)開(kāi)銷

db.Fastest<DC_Scene>().BulkCopy(lstData);
db.Fastest<Order>().PageSize(100000).BulkCopy(insertObjs);
//Winfom中要用Task.Run 底層是異步實(shí)現(xiàn)

BulkUpdate

使用BulkCopy將大量數(shù)據(jù)快速導(dǎo)入臨時(shí)表中。然后,通過(guò)表與表之間的高效操作(如UPDATE語(yǔ)句)進(jìn)行數(shù)據(jù)更新,而不是逐條處理。這種方法降低了數(shù)據(jù)庫(kù)操作的頻率,減少了系統(tǒng)開(kāi)銷,從而提高了更新效率。最后,及時(shí)清理臨時(shí)表,確保數(shù)據(jù)的一致性和數(shù)據(jù)庫(kù)性能的穩(wěn)定性。這種策略在大規(guī)模數(shù)據(jù)更新時(shí)能夠顯著提升性能和效率

db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList())//更新
db.Fastest<RealmAuctionDatum>().PageSize(100000).BulkUpdate(GetList())//更新
//Winfom中要用Task.Run 底層是異步實(shí)現(xiàn) 

BulkMerge (5.1.4.109)

大數(shù)據(jù) :插入或者更新

原理Oracle和SqlServer使用了Merge Into+BulkCopy ,其他庫(kù)使用分頁(yè)+BulkCopy +查詢驗(yàn)證

db.Fastest<Order>().BulkMerge(List);
db.Fastest<Order>().PageSize(100000).BulkMerge(List);
//Winfom中要用Task.Run 底層是異步實(shí)現(xiàn)

使用BulkCopy將需要更新的數(shù)據(jù)批量導(dǎo)入到臨時(shí)表(或者使用臨時(shí)內(nèi)存表)中。

使用MERGE INTO語(yǔ)句將臨時(shí)表中的數(shù)據(jù)與目標(biāo)表進(jìn)行比較和合并。根據(jù)需要更新的條件,判斷是否執(zhí)行更新操作,同時(shí)可以在MERGE INTO語(yǔ)句中指定需要更新的列。通過(guò)一次性的批量操作,實(shí)現(xiàn)了大規(guī)模數(shù)據(jù)的高效更新,減少了數(shù)據(jù)庫(kù)操作的次數(shù),提高了性能。

這種方法結(jié)合了數(shù)據(jù)庫(kù)的批量導(dǎo)入和靈活的條件更新,適用于需要處理大規(guī)模數(shù)據(jù)更新的場(chǎng)景,提供了高效、快速的數(shù)據(jù)更新解決方案。

BulkQuery

純手工指定映射+Emit綁定防止類型沖突引起的裝拆和拆箱并且預(yù)熱后達(dá)到原生水準(zhǔn)

db.Queryable<Order>().ToList(); 
//分頁(yè)降低內(nèi)存 適合復(fù)雜的DTO轉(zhuǎn)換和導(dǎo)出
List<Order> order = new List<Order>(); 
db.Queryable<Order>().ForEach(it=> { order.Add(it); /*禁止這兒操作數(shù)據(jù)庫(kù)因?yàn)闀?huì)循環(huán)*/} ,2000);

BulkDelete

刪除操作慢的原因包括事務(wù)處理、索引更新、并發(fā)鎖定、數(shù)據(jù)量大、觸發(fā)器和硬件性能等。為提高性能,可分批次刪除。

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

Select INTO

表和表之間的導(dǎo)入,如果在同一個(gè)庫(kù)中并且表已存在性能比bulkcopy要快些

Select INTO
表和表之間的導(dǎo)入
//例1:不同實(shí)體插入 Select Into
db.Queryable<Order>()
 //.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不過(guò)ID就不一樣了  
 .Select(it=>new { name=it.name,......})           
 .IntoTable<實(shí)體2>();
    
//例2: 同實(shí)體不同表插入   
db.Queryable<Order>()
 //.IgnoreColumns(it=>it.Id) 如果是自增可以忽略,不過(guò)ID就不一樣了
.IntoTable<Order>("新表名");

SqlBulkCopy 類

(在.NET中提供的用于高性能批量操作數(shù)據(jù)的類)結(jié)合ORM框架進(jìn)行大數(shù)據(jù)插入和更新。結(jié)合 SqlBulkCopy 進(jìn)行大數(shù)據(jù)處理可以提供更高的性能,下面是一些優(yōu)化原則和最佳實(shí)踐:

1、使用事務(wù)

將 SqlBulkCopy 操作放在一個(gè)數(shù)據(jù)庫(kù)事務(wù)中。這樣,如果插入或更新過(guò)程中發(fā)生錯(cuò)誤,你可以回滾整個(gè)操作,確保數(shù)據(jù)的一致性。

2、調(diào)整 BatchSize

BatchSize 表示每個(gè)批次中的行數(shù)。根據(jù)數(shù)據(jù)庫(kù)性能和網(wǎng)絡(luò)帶寬,調(diào)整批次大小以提高性能。通常情況下,使用合理的批次大小可以最大限度地減少數(shù)據(jù)庫(kù)的往返次數(shù),提高性能。

BulkCopyTimeout 表示超時(shí)時(shí)間(以秒為單位),如果在指定的時(shí)間內(nèi)操作沒(méi)有完成,操作將被中斷。根據(jù)數(shù)據(jù)量的大小和網(wǎng)絡(luò)條件,調(diào)整超時(shí)時(shí)間。

3、使用臨時(shí)表

有時(shí),將數(shù)據(jù)先插入到一個(gè)臨時(shí)表中,然后執(zhí)行SQL語(yǔ)句將數(shù)據(jù)從臨時(shí)表復(fù)制到目標(biāo)表,這種方法也可以提高性能。這是因?yàn)榕R時(shí)表可以不受約束和索引的影響,插入速度更快。

4、注意內(nèi)存使用

在進(jìn)行大數(shù)據(jù)操作時(shí),需要注意內(nèi)存的使用情況,以防止內(nèi)存溢出。可以考慮分批次處理數(shù)據(jù),避免一次性加載大量數(shù)據(jù)到內(nèi)存中。綜上所述,結(jié)合使用 SqlBulkCopy 和ORM框架時(shí),通過(guò)調(diào)整參數(shù)、合理使用事務(wù)、關(guān)閉索引和約束等方式,可以最大限度地提高大數(shù)據(jù)插入和更新的性能。

轉(zhuǎn)自:果糖大數(shù)據(jù)科技

鏈接:cnblogs.com/sunkaixuan/p/17747938.html


該文章在 2024/3/26 18:37:07 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
日韩亚洲人成在线综合日本 | 永久电影三级在线观看 | 日本在线中文字幕第一视频 | 中文字幕乱码激情视频 | 亚洲中文久久字幕 | 亚洲中文字幕综合久久 |