是否可以使用Nhibernate在多个表上对一个对象进行分区?

是否可以使用Nhibernate在多个表上对一个对象进行分区?,nhibernate,mapping,database-partitioning,Nhibernate,Mapping,Database Partitioning,我们有一个系统,每月收集大量数据,并执行相当先进的计算,从而进一步增加数据库。由于客户要求我们需要存储三年前快速访问的数据,并且我们必须能够访问长达十年的旧数据,因此这可能是低性能的,需要一些工作。我们希望避免数据库及其表过度增长的性能问题 在讨论过使用SQL Enterprise后,由于我们还没有获得专门知识,而且由于我们的系统中有太多相互引用的表,所以我们倾向于创建某种历史表,我们每月将数据移动到这些历史表中,并将基于参数的select查询重写为根据情况,在常规表或历史记录中搜索,或同时在两

我们有一个系统,每月收集大量数据,并执行相当先进的计算,从而进一步增加数据库。由于客户要求我们需要存储三年前快速访问的数据,并且我们必须能够访问长达十年的旧数据,因此这可能是低性能的,需要一些工作。我们希望避免数据库及其表过度增长的性能问题

在讨论过使用SQL Enterprise后,由于我们还没有获得专门知识,而且由于我们的系统中有太多相互引用的表,所以我们倾向于创建某种历史表,我们每月将数据移动到这些历史表中,并将基于参数的select查询重写为根据情况,在常规表或历史记录中搜索,或同时在两者中搜索

由于我们也在使用NHibernate进行映射,我想知道是否有可能创建一个映射文件来处理这个问题,几乎使用某种多模态或继承,其中每个对象根据参数存储在不同的表中


我知道这听起来很复杂也很奇怪,还有其他方法可以实现这一点,但我想让人们回答这个问题,而不是给出其他建议来代替。据我所知,NHibernate无法做到每个类都可以映射到一个表/视图,但您可以使用SQL查询或StoredProcess取决于用于填充映射对象的NHibernate版本。 在您的情况下,可以通过对不同表进行联合来创建组合视图,然后可以使用SQL查询填充实体。
还有另一种解决方案,您可以为使用该视图的查询创建一个摘要对象,因此您可以使用HQL和criteria来查询该对象。

简短回答否。我不会创建视图,因为您提到了很多连接

就我个人而言,我会创建摘要表,并使用无状态会话或类定义中的最小可变=false直接映射到这些摘要表。将这些汇总表视为仅用于报表的非规范化数据。唯一的缺点是,如果历史数据定期更改,则汇总表也需要更改。如果历史数据从未改变,那么这应该很容易实现

我也很可能将这些汇总表存储在另一个目录中,而不是添加到当前系统的大小中


这恐怕不是一个快速的胜利。

我在想,可能可以映射相同基类的两个对象,每个对象映射到不同的表,我们可以创建查询,指定我们真正想要的子类。这意味着您必须有两个不同的类型,并分别使用它们来查询您的数据。除非为基类保留一个单独的表,该表显示查找每条记录的位置,否则不能使用基类进行查询。