以编程方式计算查询

时间:2014-07-13 02:25:11

标签: java database hibernate database-performance

我正在使用Hibernate作为ORM处理Java EE项目,我已经到了一个阶段,我必须对我的类执行一些数学计算,如SUM,COUNT,加法和除法。

我有两个解决方案:

  1. 选择我的类并以编程方式在我的代码中应用这些操作
  2. 对我的命名查询进行计算
  3. 我想在性能和速度方面取悦,哪一个更好?

    谢谢你

2 个答案:

答案 0 :(得分:2)

如果要在同一事务中从数据库加载要进行聚合的相同实体,那么如果使用Java进行计算,性能会更好。 它为您节省了一次数据库往返,因为在这种情况下,您已经拥有了内存中的实体。 其他好处是:

  • 更容易对计算进行单元测试,因为您可以坚持使用基于Java的单元测试框架
  • 将逻辑保持为一种语言
  • 还可以用于尚未保留的实体集合

但是如果您不打算加载要进行计算的同一组实体,那么如果让数据库进行计算,几乎在任何情况下都可以获得性能提升。涉及的实体越多,性能优势就越大。

想象一下,对今年订单中的所有订单项进行总结,可能是数百万。

应该很清楚,必须通过TCP连接将所有这些实体加载到Java进程的内存中(即使它位于同一台机器中),首先需要花费更多时间和更多内存,而不是让数据库执行计算。

如果你的映射需要每个实体有额外的查询,那么Hibernate将为每个实体至少提供一次额外的数据库往返,在这种情况下,在数据库中计算SQL内容的性能优势会更大。

答案 1 :(得分:0)

对实体(或数据)进行这些计算吗?如果是,那么你确实可以进行查询(甚至更快,使用sql查询iso hql)。从性能的角度来看,IMO存储过程很闪耀,但是人们不经常使用hibernate。

此外,如果您经常重复计算,请尝试在应用程序中使用缓存。