Web ソースからスクレイピングしたデータをデータベースに同時に入力する複数のスレッドが関係する状況があります。スクレイパーは定期的に実行され、さまざまなソースから新しいデータを収集します。
私は NHibernate を使用するのが初めてで、セッションを管理する最善の方法が完全にはわかりません。
各ワーカーが行うことの例:
- Web ソースからエンティティ A をスクレイピングする
- A に関連する各エンティティ B をスクレイピングし、A に別の B があることを記録します (つまり、A には多くの B があり、B には 1 つの A があります)。
各 B を永続化するには、セッションで B を作成するための A への参照が必要です。次に、A は B を子のリストに追加する必要があります。その後、A と B の両方が永続化されます。
A には多くの B があり、B には多くの C があります... リーフ レベルでは、A には何千ものリーフの子があるため、セッションを維持することは非現実的 (?) です。このチェーンをずっと開いてください。
別の方法として、チェーンの各親の識別子 (セッションとは別に保存できます) を記録し、子を作成する必要があるたびに、この ID を介して親に読み込みます。
また、シングルスレッドを意図していることも理解しているISession
ので、スレッドごとに少なくとも 1 つのセッションが必要ですが、これを超えると、最善のアプローチが本当にわかりませんか?
現時点では少し混乱していますが、どんなアイデアでも大歓迎です!