我的情况涉及多个线程同时使用从 Web 源中抓取的数据填充数据库。刮板将定期运行以从各种来源收集新数据。
我是使用 NHibernate 的新手,不完全确定如何最好地管理会话。
每个工人做什么的一个例子:
- 从 Web 源中抓取实体 A
- 抓取与A相关的每个实体B,并记录A有另一个B(即一个A有很多B,一个B有一个A)
为了持久化每个 B,会话需要对 A 的引用来创建 B,然后 A 需要将 B 添加到其子列表中。然后 A 和 B 都被持久化。
这种AB子父级的情况有一个层次结构,A有很多B,B有很多C......在叶子级别,A有数千个叶子孩子,所以保持会话是不切实际的(?)沿着这条链一路打开。
另一种方法是记录链中每个父级的标识符(可以独立于会话存储),并在每次需要创建子级时通过此 id 加载到父级中。
我也明白 anISession
是单线程的,所以我每个线程至少需要一个会话,但除此之外我真的不确定最好的方法吗?
任何想法表示赞赏,目前有点困惑!