我正在使用Hibernate作为ORM处理Java EE项目,我已经到了一个阶段,我必须对我的类执行一些数学计算,如SUM,COUNT,加法和除法。
我有两个解决方案:
我想在性能和速度方面取悦,哪一个更好?
谢谢你
答案 0 :(得分:2)
如果要在同一事务中从数据库加载要进行聚合的相同实体,那么如果使用Java进行计算,性能会更好。 它为您节省了一次数据库往返,因为在这种情况下,您已经拥有了内存中的实体。 其他好处是:
但是如果您不打算加载要进行计算的同一组实体,那么如果让数据库进行计算,几乎在任何情况下都可以获得性能提升。涉及的实体越多,性能优势就越大。
想象一下,对今年订单中的所有订单项进行总结,可能是数百万。
应该很清楚,必须通过TCP连接将所有这些实体加载到Java进程的内存中(即使它位于同一台机器中),首先需要花费更多时间和更多内存,而不是让数据库执行计算。
如果你的映射需要每个实体有额外的查询,那么Hibernate将为每个实体至少提供一次额外的数据库往返,在这种情况下,在数据库中计算SQL内容的性能优势会更大。
答案 1 :(得分:0)
对实体(或数据)进行这些计算吗?如果是,那么你确实可以进行查询(甚至更快,使用sql查询iso hql)。从性能的角度来看,IMO存储过程很闪耀,但是人们不经常使用hibernate。
此外,如果您经常重复计算,请尝试在应用程序中使用缓存。