現在、NHibernateを使用して50k 行のブロックを読み取っています。約20 分かかります。読み取るデータは、SQLSERVER 2005で 5 つ以上のテーブルを結合することによって準備されます。私の主な懸念は、NHibernateが行を取得するたびに新しいクエリを準備することです。これにはかなりの時間がかかります。
NHibernate は各行をオブジェクトにマップする必要があるため、必要なことはわかっていますが、読み取りが主な関心事である場合、このアプローチは役に立ちません。
コレクションを使用してデータを保存しているため、ステートレスセッションを使用できません
。パラメーターを介してフィルターを適用する必要もあります。ストアドプロシージャも実装しましたが、どういうわけか役に立ちませんでした。
大量のデータを処理する他の方法はありますか。
------編集-------
マップに使用していた2つの構成ファイルを次に示します
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="myNameSpace" assembly="myNameSpace">
<class name="MyClass" table="TableNameFromDb">
<id name="ID" column="ID">
<generator class="native" />
</id>
<property name="prop1"/>
<property name="prop2"/>
<bag name="bag1" cascade="all-delete-orphan" inverse="false" fetch="join" lazy="false">
<key column="prop1"/>
<one-to-many class="MyClass2" />
</bag>
</class>
</hibernate-mapping>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="myNameSpace" assembly="myNameSpace">
<class name="MyClass2" table="TableNameFromDb2">
<id name="prop2" column="ID">
<generator class="native" />
</id>
<property name="prop2"/>
<property name="prop3"/>
</class>
</hibernate-mapping>
ここでの主な関心事は、NHibernate が行ごとに新しいクエリを作成し、オーバーヘッドであるデータベースに送信することです。