【问题标题】:Preloading JPA/Hibernate entities to an in-memory cache将 JPA/Hibernate 实体预加载到内存缓存中
【发布时间】:2022-10-18 01:26:44
【问题描述】:

在工作中,我们使用 Java EE (WildFly) 的工作量不断增加。持久层使用带有 JPA 和 Hibernate 的 EJB。一个表(主数据表)获得了 99% 的流量和数据库大小,而还有许多其他表用于描述数据。

它可以工作,但有时会变慢,因为在保存数据表实体时必须加载许多描述实体。我们似乎无法启动二级 Hibernate 缓存,因此我们目前正在研究内存缓存。

基本思想只是我上面提到的每个描述实体的简单 HashMap。我们谈论的是总共 50k 条记录的 10 个表,因此它不会对数据库产生严重影响。

启动时全部加载,放入HashMap中,与其他缓存实体链接(有些描述实体之间有关系)。当其中一个实体被更新时,在缓存中将其替换为更新的版本。当它们驻留在缓存中时,它们会被逐出并且应该像普通 POJO 一样运行。

我们还研究了一些真正的缓存解决方案,如 JCache、Caffeine 等,但不确定我们是否真的需要它们提供的功能。

这有什么意义吗?或者这是解决问题的愚蠢方法?

【问题讨论】:

    标签: java hibernate jpa caching guava


    【解决方案1】:

    Hibernate 的二级缓存将处理所有这些。如果(该应用程序的)某些事务更改数据,它将透明地将对象放入缓存并驱逐它们。二级缓存是指在缓存中缓存实体对象。还有一个查询缓存,它使用二级缓存。请注意,尽管使用org.hibernate.query.Query#setCacheable,但需要在每个查询的基础上启用查询缓存

    【讨论】:

      猜你喜欢
      • 2015-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-02
      • 2014-04-06
      • 1970-01-01
      • 2017-09-29
      • 2012-01-25
      相关资源
      最近更新 更多