Java 如何在需求增长时控制Hibernate映射的使用
我曾经开发过许多Java web应用程序,其中持久性是通过Hibernate实现的,我们从一些中心类(例如保险应用程序)开始,而没有花任何时间考虑如何将事情分解成可管理的块。随着时间的推移,随着功能的添加,我们会添加更多的映射(费率、客户机、地址等),然后花费在保存和加载保险对象及其连接的所有内容上的时间会增加。特别是当您接近上线日期时,使用每个表中的大量数据进行的性能测试开始证明速度太慢 显然,我们有很多方法可以尝试进行分区,例如,只映射客户端CRUD屏幕的客户端类,等等,这比在开发周期结束时尝试使用它更好Java 如何在需求增长时控制Hibernate映射的使用,java,performance,hibernate,persistence,Java,Performance,Hibernate,Persistence,我曾经开发过许多Java web应用程序,其中持久性是通过Hibernate实现的,我们从一些中心类(例如保险应用程序)开始,而没有花任何时间考虑如何将事情分解成可管理的块。随着时间的推移,随着功能的添加,我们会添加更多的映射(费率、客户机、地址等),然后花费在保存和加载保险对象及其连接的所有内容上的时间会增加。特别是当您接近上线日期时,使用每个表中的大量数据进行的性能测试开始证明速度太慢 显然,我们有很多方法可以尝试进行分区,例如,只映射客户端CRUD屏幕的客户端类,等等,这比在开发周期结束时
我只是想知道是否有关于处理/缓解这种情况的方法的建议。Java有这样的端口吗?它会让你的生活变得轻松,让事情变得更快,还有很多其他的好处 编辑:
此外,简单地用硬件解决问题通常要便宜得多。如果事情进展太慢,那么在硬件上花费100美元或1000美元是值得的,而不是进行漫长的(代价高昂的)重新设计工作。如果你没有利用Hibernate的惰性关联,这可能是开始的地方。转换可能是一个挑战,因为您将发现,在没有打开会话的情况下,有多少代码假定整个图形都已加载。在这种情况下,你需要。这类问题很快就会演变成一场丑陋的宗教辩论。已经讨论了ORMs缺点的许多方面。然而,如果不跳出宗教战争的话题,就很难在这一领域展开讨论。ORM很好,但在某些情况下,可能不是最合适的。也许您正在经历这样一种情况:ORM阻碍了您的系统需要完成的任务。也许不是,一些冬眠专家可以引导你穿越浅滩。有几个技巧:
- 不要使用急切的抓取。如果您使用的是注释,您应该确保每个*ToMany注释都是惰性的(fetch=…lazy)。贪图便宜是罪恶的。如果出于某种原因,您确实需要即时抓取,则始终可以在查询中指定它
- 不要在单个事务中加载太多对象。假设您有一个将处理大量实体(>1000)的事务。您应该使用一些分页,并在它自己的事务中处理每个页面。在单个事务中加载大量对象将加载会话,性能将降低。或者,您可以逐出不再使用的对象,但如果加载了对象图,这可能会很棘手