【问题标题】:NHibernate-friendly database design for dynamically recreated tables用于动态重新创建表的 NHibernate 友好型数据库设计
【发布时间】:2011-01-22 11:22:34
【问题描述】:

我有一个关于我们那里的 nhibernate 大师的应用程序设计问题。我的应用程序跟踪提交的文件列表,并将从这些文件中解析的数据显示为可搜索的交易列表。

提交这些文件的人员/实体可以(随时)用更新版本替换文件的先前版本。只有来自每个文档的最新版本的交易才会显示在可搜索的交易列表中。

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

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

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

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

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

我考虑过的一些替代方案是:

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

2) 通过 NHibernate 会话重建事务表,虽然我不知道它的机制是如何工作的。 NHibernate 需要了解“活动”事务集以及“待处理”事务集,并且需要将待处理事务集映射到一些动态命名的表。

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

任何人都知道解决此类问题的 NHibernate 最佳实践是什么?

【问题讨论】:

  • 为什么要为此使用 sql 数据库?
  • 可能有数百万笔交易需要从这些文档中解析出来
  • 下一个问题:为什么 sql 数据库比其他类型的数据库性能更好?

标签: nhibernate


【解决方案1】:

我建议使用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是一样的)

【讨论】:

  • Lucene 将是一种非常好的索引和搜索这些交易的方式,但我确实需要将交易内容解析为谨慎的数据字段作为我流程的一部分
  • @David,Lucene 在这种情况下也可以工作,在解析事务后只需将它们添加到 lucene 索引。它只是一个新的 Lucene Analyzer(详情请参阅lucene.apache.org/java/2_4_0/api/org/apache/lucene/analysis/…)。
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 2018-10-08
  • 2011-08-31
  • 1970-01-01
  • 2015-06-24
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多