Nhibernate-batch-size
NHibernate-バッチサイズ
この章では、バッチサイズの更新について説明します。 バッチサイズを使用すると、サポートされているデータベースのデータベースへの1回のラウンドトリップで送信される更新の数を制御できます。
- 更新バッチサイズは、NHibernate 3.2の時点でデフォルトになっています。
- ただし、以前のバージョンを使用している場合、またはNHibernateアプリケーションを調整する必要がある場合は、NHibernateのパフォーマンスを調整するために使用できる非常に便利なパラメーターである更新バッチサイズを確認する必要があります。
- 実際、バッチサイズは、グループ内でデータベースにプッシュする挿入の数を制御します。
- 現時点では、基になるデータベースプロバイダーがクエリのバッチ処理をサポートする必要があるため、SQL ServerとOracleのみがこのオプションをサポートしています。
バッチサイズを10に設定してセットに10個のレコードを挿入する簡単な例を見てみましょう。
以下は、25個のレコードがデータベースに追加される完全な実装です。
アプリケーションを実行して、これらすべての更新がNHibernateプロファイラーにジャンプしていることを確認しましょう。 データベースへの26回の個別の往復と25回のデータベースへの往復と、学生のリストの取得があります。
さて、それはなぜですか? その理由は、次のコードに示すように、IDのマッピングファイルでネイティブ識別子生成戦略を使用しているため、NHibernateは select scope identity を行う必要があるためです。
したがって、 guid.comb メソッドなどの別のメソッドを使用する必要があります。 guid.combにアクセスする場合は、顧客にアクセスして、これを guid に変更する必要があります。 それでうまくいきます。 次のコードを使用して、ネイティブからguid.combに変更しましょう。
したがって、これらのIDを生成するのはデータベースです。 NHibernateが生成されたIDを確認できる唯一の方法は、すぐにそれを選択することでした。 または、学生のバッチを作成した場合、作成された学生のIDを一致させることはできません。
データベースを更新するだけです。 学生テーブルを削除して、次のクエリを指定して新しいテーブルを作成します。SQLServerオブジェクトエクスプローラーに移動して、データベースを右クリックし、[新しいクエリ …]オプションを選択します。
クエリエディターを開き、次のクエリを指定します。
このクエリは、最初に既存の学生テーブルを削除してから、新しいテーブルを作成します。 ご覧のとおり、整数の主キーをIDとして使用するのではなく、 UNIQUEIDENTIFIER を使用しています。
このクエリを実行してから* Designerビュー*に移動すると、次の画像に示すように、一意の識別子でIDが作成されていることがわかります。
データを挿入する際に、program.csファイルからIDを削除する必要があります。これは、そのための guids を自動的に生成するためです。
ここでアプリケーションを再度実行し、NHibernateプロファイラーを見てください。 これで、NHibernateプロファイラーは26回の往復ではなく4回だけになります。
テーブルに10行を挿入してから、さらに10行を挿入し、残りの5行を挿入します。 そして、コミット後、すべてのレコードを取得するためにもう1つ挿入しました。
- そのため、可能な限り10のグループに分けています。
- したがって、多くの挿入を行っている場合、バッチ処理ができるため、アプリケーションの挿入パフォーマンスが劇的に向上します。
- これは、NHibernateが guid.comb アルゴリズムを使用してそれらのGUID自体を割り当てるためであり、これを行うためにデータベースに依存する必要はありません。
- したがって、バッチサイズを使用することは、それを調整するための優れた方法です。