java - 是否要延迟加载以努力提高性能

标签 java hibernate lazy-loading

有人建议,为了提高系统的性能,应该全面使用延迟加载。即将具有“mappedBy”属性的 OneToOne 映射更改为 @OneToMany 映射。这是为了解决并阻止从数据库加载不需要的数据,从而导致应用程序速度缓慢。

我们运行一个多层系统(基本上是两层)。我们有使用 JSF 的前端和包含业务层和数据库访问层的后端。前端和后端通信 View EJB - 但 EJB 中没有真正的逻辑。使用的其他技术 - Spring 和 Hibernate

现在,在阅读了有关该主题的一些内容之后,似乎使用延迟加载并不是 Elixir ,因为它需要正确应用。对于每次延迟加载,都会发出一条 Select 语句来获取数据。还有一个问题是,如果前端访问要延迟加载的属性并且 session /连接在后端关闭,那么我们将得到 null。

上述担忧是否正确?

那么,实现延迟加载解决方案或性能改进的最佳方法/实践是什么?希望尽可能不要重做数据模型。

我最初的想法是与 DBA 小组合作,了解两个系统之间发生的情况 - 查询的外观、我们如何使用数据等。识别问题点,检查 Hibernate 对象/查询看看如何最好地改进它。还要看前端来确定数据从后端传递到前端的内容以及如何显示等。

好的方法/其他方法?

最佳答案

您应该做的第一件事是测量您的应用程序并找出到底是什么导致了性能问题。

使用 JProfiler 等工具找出问题所在。

一旦您知道发生了什么,您就可以决定如何解决它。

在不知道导致性能问题的原因的情况下直接实现延迟加载方案将是浪费您的时间。

如果您发现数据库层是您的问题所在,那么您可以让 DBA 参与进来,看看您的架构/查询是否可以改进,然后再进行更彻底的操作。

关于java - 是否要延迟加载以努力提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/878069/

相关文章:

java - 从 Modelclass 层次结构的顶层调用 setter

java - Spring MVC 无法转换类型为 'java.lang.Integer' 的属性值

hibernate - Seam 2.x 和 Hibernate 3.5?

javascript - Angular 2 SystemJS 延迟加载捆绑问题

javascript - jQuery 无限滚动/延迟加载

java - 无法对非静态类型 MyRunnable 进行静态引用

Java 哈希集合

asp.net-mvc - DbContext 错误?检索新保存的记录后导航属性为空

java - 在 Fragment 中实现 RecyclerView

java - 带有 H2 JPA 的 Spring boot 和 JUnit 导致找不到 'pg_class'