NHibernate友好的数据库设计,用于动态重新创建表

NHibernate友好的数据库设计,用于动态重新创建表,nhibernate,Nhibernate,我有一个关于nhibernate专家的应用程序设计问题。我的应用程序跟踪提交的文档列表,并将从这些文档解析的数据显示为可搜索的事务列表 提交这些文件的人员/实体可以(在任何时候)用更新版本替换以前版本的文件。可搜索交易列表中只应显示每个文档最新版本的交易 此应用程序的前端使用NHibernate进行数据访问,以执行事务的显示和搜索 我最初的想法是在我的文档表上放置一个触发器,在使用存储过程插入、更新或删除文档表之后,该触发器将删除并重新创建事务表 这种想法似乎有两个缺点: 1) 由于存储的过程可

我有一个关于nhibernate专家的应用程序设计问题。我的应用程序跟踪提交的文档列表,并将从这些文档解析的数据显示为可搜索的事务列表

提交这些文件的人员/实体可以(在任何时候)用更新版本替换以前版本的文件。可搜索交易列表中只应显示每个文档最新版本的交易

此应用程序的前端使用NHibernate进行数据访问,以执行事务的显示和搜索

我最初的想法是在我的文档表上放置一个触发器,在使用存储过程插入、更新或删除文档表之后,该触发器将删除并重新创建事务表

这种想法似乎有两个缺点:

1) 由于存储的过程可能需要一分钟才能运行以重新生成事务列表,因此会有一段时间事务列表表不完整甚至不存在

2) 重建事务表后,NHibernate将读取的数据将变得无效,任何缓存的信息都将无效

我考虑过的几个备选方案是:

1) 使用视图作为NHibernate用于从数据库读取的“表”,并在成功重建完成后更新这些视图以指向新的数据表。但这并不能解决可能的缓存问题

2) 通过NHibernate会话重建事务表,尽管我不知道该机制是如何工作的。NHibernate需要了解“活动”事务集以及“挂起”事务集,并且挂起的事务集需要映射到一些动态命名的表

也许我只是把自己设计成椒盐卷饼

有人知道NHibernate针对此类问题的最佳实践是什么吗?

我建议将其用于索引和搜索这些文档。而且您不需要触发器,任何SP-Lucene都会自动更新所有索引。
下面是一些关于lucene的教程:



(适用于java版本,但API是相同的)

为什么要使用sql数据库进行此操作?这些文档可能需要解析数百万个事务下一个问题:为什么sql数据库的性能比其他类型的数据库更好?Lucene将是索引和搜索这些事务的非常好的方法,但我确实需要将事务内容解析为谨慎的数据字段,这是我工作的一部分process@David,Lucene在这种情况下也可以工作,在解析事务之后,只需将它们添加到Lucene索引。这将只是一个新的Lucene分析器(有关详细信息,请参阅)。