我有一个针对那些nhibernate gurus的应用程序设计问题。我的应用程序跟踪提交的文档列表,并将这些文档解析的数据作为可搜索的事务列表显示给公众。
提交这些文件的人/实体可以(在任何时候)用更新版本替换先前版本的文档。只有每个文档的最新版本中的事务才能显示在可搜索的事务列表中。
此应用程序的前端使用NHibernate进行数据访问,以执行事务的显示和搜索。
我最初的想法是在我的文档表上放置一个触发器,在使用存储过程进行文档表的任何插入,更新或删除后,将删除并重新创建事务表。
这个想法似乎有两个缺点:
1)由于存储过程可能需要一分钟才能重新生成事务列表,因此会有一段时间事务列表表不完整或甚至不存在。
2)在重建事务表后,NHibernate将读取的数据将变为无效,并且任何缓存的信息都将无效。
我考虑过的一些替代方案是:
1)使用Views作为“表”NHibernate用于从数据库中读取数据,并在成功重建完成后更新这些视图以指向新数据表。但这并不能解决可能的缓存问题。
2)通过NHibernate会话进行事务表重建,但我无法弄清楚这种机制是如何工作的。 NHibernate需要知道“实时”事务集以及“待处理”事务集,并且待处理的事务集需要映射到一些动态命名的表。
也许我只是将自己设计成椒盐脆饼。
任何人都有任何想法NHibernate对这类问题的最佳实践是什么?
答案 0 :(得分:2)
我建议使用Lucene.net来索引和搜索该文档。并且您不需要触发器,任何SP-Lucene都会自动更新所有索引
这里有一些关于lucene的教程:
Lucene.Net Best Practices
What are some good resources on using Lucene.Net?
http://www.lucenetutorial.com/lucene-in-5-minutes.html(它适用于java版本,但API是相同的)