首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

Hxj.Data 批次處理 DbBatch:累積 SQL 打包執行、自訂批次大小與交易等級

     編輯:關於ASP.NET

批次處理核心價值:減少網路往返、提升大量寫入吞吐量

預設累積 10 條 SQL 才發送一次,可自訂門檻與交易隔離等級。

基本用法

using (DbBatch batch = DbSession.Default.BeginBatchConnection()) {
    batch.Update(Products._.ProductName, "apple", Products._.ProductID == 1);
    batch.Update(Products._.ProductName, "pear", Products._.ProductID == 2);
    batch.Update(Products._.ProductName, "orange", Products._.ProductID == 3);
} // 區塊結束自動發送剩餘 SQL

產生 SQL(單次發送):

UPDATE [Products] SET [ProductName]=@p0 WHERE [ProductID]=@p1;
UPDATE [Products] SET [ProductName]=@p2 WHERE [ProductID]=@p3;
UPDATE [Products] SET [ProductName]=@p4 WHERE [ProductID]=@p5;
Parameters: @p0=apple, @p1=1, @p2=pear, @p3=2, @p4=orange, @p5=3

自訂批次大小與交易等級

// 累積 20 條才發送,交易等級 ReadCommitted
DbBatch batch = DbSession.Default.BeginBatchConnection(20, IsolationLevel.ReadCommitted);

強制中途執行:Execute()

using (DbBatch batch = DbSession.Default.BeginBatchConnection()) {
    batch.Update(...); // 第 1 條
    batch.Update(...); // 第 2 條
    batch.Execute(); // 強制發送前 2 條
    batch.Update(...); // 第 3 條(新批次起始)
} // 區塊結束發送第 3 條

輸出:分兩批執行,各自獨立參數化。

Try-Catch 寫法

DbBatch batch = DbSession.Default.BeginBatchConnection();
try {
    batch.Update(...);
    batch.Update(...);
    batch.Update(...);
}
catch {
    // 錯誤處理
}
finally {
    batch.Close(); // 必須關閉,發送剩餘 SQL 並釋放連線
}

適用場景與效能增益

場景無批次有批次 (20)提升
匯入 10,000 筆訂單10,000 次網路往返500 次20x
夜間帳務結轉 100,000 筆極慢、易逾時秒級完成數量級
記錄用戶行為日誌每請求一個連線合併寫入連線池壓力大降

注意事項

  • 批次內 SQL 共用同一連線,**不自動開啟交易**(除非指定隔離等級)。
  • 若需原子性,請在 BeginBatchConnection 指定 IsolationLevel 或外層包 DbTrans。
  • 參數化自動處理,防注入、計畫快取友善。
  • 超大批次(>1000)建議分段 Execute(),避免單次封包過大導致網路層分片。

DbBatch 是 Hxj.Data 高效能寫入的利器,善用批次大小調整與強制執行,可輕鬆應對百萬級資料匯入、日誌記錄、ETL 等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved