我们正在建立一个每月收集大量数据的系统,并执行相当先进的计算,从而进一步增加数据库。由于我们有三年前我们需要存储数据以便快速访问的客户的要求,并且我们必须能够访问旧数据(最多十年),但这可能是低性能并且需要一些工作。我们希望避免数据库及其表格不成比例地出现的性能问题。
在讨论使用SQL Enterprise之后(由于我们还没有获得专有技术,因此非常昂贵且充满了陷阱)并且由于我们的系统有很多表可以相互引用,因此我们倾向于创建某种历史表我们以月度方式移动数据,并根据参数重写我们所拥有的选择查询,以便根据情况在常规表或历史记录中进行搜索。
由于我们也在使用NHibernate进行映射,我想知道是否可以创建一个映射文件来处理这个问题(几乎)使用某种多态性或继承,其中每个对象都基于参数存储在不同的表中?
我知道这听起来有点复杂和奇怪,而且还有其他方法可以执行此操作但是我这个问题我宁愿让人们回答问题,也不要让其他方法使用。
答案 0 :(得分:0)
据我所知NHibernate不能这样做(每个类都可以映射到一个表/视图)但你可以使用SQL查询或StoredProcedures(取决于你正在使用的NHibernate的版本)来填充映射的对象。 在您的情况下,您可以通过创建不同表的联合创建组合视图然后您可以使用SQL查询来填充您的实体。 还有另一种解决方案,您可以为使用该视图的查询创建摘要对象,因此您可以使用HQL和条件来查询此对象。
答案 1 :(得分:0)
简短回答“不”。当你提到很多加入时,我不会创建视图。
我个人会创建汇总表并使用无状态会话直接映射到这些表,或者至少在类定义上映射mutable=false
。将这些汇总表视为仅用于报告的非规范化数据。唯一的缺点是,如果历史数据定期更改,那么汇总表也需要更改。如果历史数据永远不会改变,那么这应该很容易实现。
我也很可能将这些汇总表存储在另一个目录中,而不是添加到当前系统的大小。
恐怕这不是一个快速的胜利。