【发布时间】:2011-12-07 23:40:51
【问题描述】:
我遇到的情况涉及多个线程同时使用从 Web 源抓取的数据填充数据库。刮板将定期运行以从各种来源收集新数据。
我是使用 NHibernate 的新手,不完全确定如何最好地管理会话。
每个工人的工作示例:
- 从 Web 源中抓取实体 A
- 抓取与 A 相关的每个实体 B,并记录 A 有另一个 B(即一个 A 有多个 B,一个 B 有一个 A)
要持久化每个 B,会话需要对 A 的引用来创建 B,然后 A 需要将 B 添加到其子列表中。然后 A 和 B 都被持久化。
这种 A-B 子-父情况有一个层次结构,即 A 有很多 B,B 有很多 C... 在叶级别,A 有数千个叶子,所以不切实际(?)保持会话在这条链中一直处于打开状态。
另一种方法是记录链中每个父级的标识符(可以独立于会话存储),并在每次需要创建子级时通过此 id 加载到父级中。
我也明白ISession 是单线程的,所以我每个线程至少需要一个会话,但除此之外我真的不确定最好的方法吗?
任何想法表示赞赏,目前有点困惑!
【问题讨论】:
标签: database hibernate nhibernate web-scraping single-user