【发布时间】:2017-01-27 00:55:07
【问题描述】:
如何在 5000 万条记录 nhibernate 中处理 Out Of Memory,我在 NHibernate 中使用了无状态会话并解决了大约 170 万条记录,但这对我的报告不利。 另一件事是我需要计算它们,所以我不能分解结果。 你能告诉我如何优化它吗?
public IEnumerable<ATMDispenseReport> GetReport(string WhereClause)
{
var CurrentUnitOfWork = this.UnitOfWork as MainUnitOfWork;
var session = CurrentUnitOfWork.StatelessSession;
string SqlQuery = "MyQuery";
var lstATMDispenseReport =session.CreateSQLQuery(SqlQuery) .SetResultTransformer(Transformers.AliasToBean<ATMDispenseReport>())
.List<ATMDispenseReport>();
return lstATMDispenseReport;
}
编辑:最终解决方案是使用 DBMS 来处理查询计算。
【问题讨论】:
-
您能否举例说明您的数据是什么样的以及您想要计算什么?也许有一种方法可以在数据库站点上进行计算,由您的 sql 查询中的适当聚合启动。
-
ORM 中的“O”代表对象。对象有bevahour。报告没有对象,因为它们没有任何行为。即使您坚持使用 ORM 进行报告,也无法创建包含 170 万行的报告——没有人(或机器)能够使用它。你想做什么?在 RAM 中加载 170 万行不会使报表比仅返回最终报表数据的 SQL 语句更快
-
50M 记录是一个非常非常强烈的指标,表明您需要一个适当的报告架构和一个适当的 ETL 流程来填充它。
-
感谢 Patrick 和 Panagiotis Kanavos :)
-
@PanagiotisKanavos 你认为有 2 个数据表来加载 1600 万和 800 万数据是个好主意吗?
标签: c# sql nhibernate rdbms