Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查询计算与编程计算_Java_Database_Hibernate_Database Performance - Fatal编程技术网

Java 查询计算与编程计算

Java 查询计算与编程计算,java,database,hibernate,database-performance,Java,Database,Hibernate,Database Performance,我正在使用Hibernate作为ORM进行JavaEE项目,我已经到了一个阶段,我必须对我的类执行一些数学计算,比如求和、计数、加法和除法 我有两种解决方案: 选择类并在代码中以编程方式应用这些操作 对命名查询执行计算的步骤 我想在性能和速度方面讨好你,哪一个更好 谢谢这些是对实体(或数据)的计算吗?如果是,那么您确实可以进行查询(或者更快,使用sql查询iso hql)。从性能的角度来看,在我看来,存储过程非常出色,但人们在hibernate中使用它们的频率不高 此外,如果您有一些频繁的重复计

我正在使用Hibernate作为ORM进行JavaEE项目,我已经到了一个阶段,我必须对我的类执行一些数学计算,比如求和、计数、加法和除法

我有两种解决方案:

  • 选择类并在代码中以编程方式应用这些操作
  • 对命名查询执行计算的步骤
  • 我想在性能和速度方面讨好你,哪一个更好


    谢谢

    这些是对实体(或数据)的计算吗?如果是,那么您确实可以进行查询(或者更快,使用sql查询iso hql)。从性能的角度来看,在我看来,存储过程非常出色,但人们在hibernate中使用它们的频率不高


    此外,如果您有一些频繁的重复计算,请尝试在应用程序中使用缓存。

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

    • 更容易对计算进行单元测试,因为您可以坚持使用基于Java的单元测试框架
    • 用一种语言保存逻辑
    • 也适用于尚未持久化的实体集合
    但是,如果您不打算加载要在其上执行计算的同一组实体,那么如果让数据库执行计算,几乎在任何情况下都会获得性能改进。参与的实体越多,绩效效益就越大

    想象一下,对今年订单中的所有行项目进行汇总,可能有几百万个

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


    如果您的映射需要每个实体进行额外的查询,那么Hibernate将为每个实体至少提供一次到数据库的额外往返,在这种情况下,在数据库上用SQL计算东西的性能优势将更大。

    我相信测试和决定这两者都很简单。你有一些性能测试数据吗?我的类太大太复杂了,测试两种方法都不是那么容易(需要很多时间),所以我宁愿在这里问,希望在我尝试测试之前找到答案。我自己的大而复杂的类闻起来很难闻。首先解决它们:-p检查这个:是那些关于实体的计算,比如属性的加法和乘法。回答Erwin,这就是我一直在寻找的,谢谢:)