1. ホーム
  2. Web プログラミング
  3. ASP.NET
  4. 自己学習プロセス

.NET複数データベース一括データ挿入、更新(SqlServer、MySql、PgSql、Oracleをサポートします。)

2022-01-13 19:37:25

機能の説明 (バージョン5.0.45が必要)

ビッグデータORM運用のパフォーマンスボトルネックはエンティティ変換であり、通常のSqlで実装することはできない

カラムが増えると変換が遅くなるため、SqlSugarは変換パフォーマンスを最大化し、最適なデータベースAPIを使用します。

データベースを操作してパフォーマンスを極限まで高める

関数の使用方法

BulkCopyは既存のORMフレームワークよりもはるかに性能が良く、EFCore Efcore.Bulkextensionよりも30%高速です。

BulkUpdateは、EFCoreEfcoreの2~3倍の速度で、既存のすべてのフレームワークに勝っています。

//insert 1 million in less than 10 seconds
db.Fastest<RealmAuctionDatum>().BulkCopy(GetList());//performance 30% faster than any existing Bulkcopy
 
//Update
BulkUpdate(GetList());//update hang all the framework N times, 30 columns 1 million 8 seconds to update
db.Fastest<RealmAuctionDatum>().BulkUpdate(GetList(),new string[]{"id"},new string[]{"name","time& quot;})//no primary key usage
 
//table set alias
db.Fastest<RealmAuctionDatum>().AS("tableName").BulkCopy(GetList())

データベース対応

<テーブル データベース API セルフインクリメント対応 SqlSever フルサポート はい

MySql

AllowLoadLocalInfile=true を追加する接続文字列。

フルサポート はい PgSql フルサポート いいえ オラクル バルクコピー いいえ

パフォーマンステスト

挿入スキーム SqlSugar VS EFCoreEFCore.BulkExtensions

10万データ30列、あなたは最初の挿入パフォーマンスでEFCore.BulkExtensionsが非常に遅いことがわかりますが、大きなデータの挿入の通常の場合は、ちょうど最初のよりも多くなっています。

EFCore.BulkExtensionsに加え、.NETを使用。

但し、EFCore.NETは除く。

BulkExtensionsはSqlServerしかサポートしておらず、SqlSugarほど性能が良くないというデメリットがあります。

使用方法に関する質問

  • 例えば、Sqlite ... まだサポートされていない場合はどうするのですか?

回答:Sqliteの通常挿入+トランザクションは、すでに市場でも十分通用するレベルです(その後、技術的なブレークスルーによりSQLITEをサポートします)。

<ブロッククオート

Insertable(insertObj).ExecuteReturnIdentity();// 通常の挿入は遅くありません、多くの列は1秒に挿入することができます10,000

  • dbをどうするか。

db.Fastestは、主に大規模なデータの挿入、更新処理に使用され、1000未満は使用する必要がない場合は、すべての後に、APIのサポートは、通常の挿入として豊富ではない、小さなデータの挿入で多くの利点は、db.Fastestパフォーマンスは主に強力です1000以上のデータを処理します。

旧バージョン

古いバージョンもこの方法で使用可能で、db.Fastestよりパフォーマンスは劣ります

//(3), blukCopy inserts
// only suitable for more than 10,000 large data insertion or the above data insertion slow case, small data insertion performance is not possible, not all libraries are supported
  
db.Insertable(List<entity>).UseSqlServer().ExecuteBulkCopy()
  
ExecuteBulkCopy() // high version of Mysql.data driver, connection string to add AllowLoadLocalInfile=true
  
db.Insertable(List<Entity>).UseOracle().ExecuteBulkCopy() //5.0.3.8-Preview

ソースコードのダウンロード

https://github.com/donet5/SqlSugar

sqlsugarは7年前から継続的にアップデートされており、どんどん良くなっているので、EFや他のORMがアップデートされないのであれば、もう1つのオープンソースを選択するのも1つの手です。

ビッグデータベースの出現で、ユーザーはますます多くのデータ処理を要求しており、大量のデータを読み、書き、更新するためのフレームワークが不可欠です。

.NETの複数のデータベースの一括挿入と更新(サポートSqlServer、MySql、PgSqlとOracle)。スクリプトハウスを学び、サポートするために役立つことを願っています。