欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

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

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

功能介紹

海量數據操作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框架時,通過調整參數、合理使用事務、關閉索引和約束等方式,可以最大限度地提高大數據插入和更新的性能。

轉自:果糖大數據科技

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


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