【发布时间】:2016-05-10 23:45:00
【问题描述】:
我正在使用带有内存中 ehcache 的休眠二级缓存,它很慢。我的意思是,不比 SQL 慢,但考虑到 SSD 上的快速数据库,也不是真的快。实际速度提升不到 2 倍,有时甚至不明显。
似乎其他人也有同样的问题,但没有得到答案: http://forum.spring.io/forum/spring-projects/data/44353-hibernate-second-level-caching-slow-no-really-slow https://forum.hibernate.org/viewtopic.php?t=985913
经过一些分析后,似乎 hibernate 总是对缓存元素进行 de/re-hydration,而不是直接存储它们,这导致了这种糟糕的性能(与直接使用 ehcache 相比,超过 100 倍)。
所以,我的问题是:
- hibernate 可以直接存储和恢复缓存的对象吗?
- 有没有其他方法可以加速二级缓存?
- 是否有相对简单的替代机制来加快休眠缓存?
【问题讨论】:
-
因为你问了三个问题而你应该只问一个问题,所以你立即将这个问题置于“太宽泛”的领域。 Stackoverflow 是关于一次问一个问题,考虑将其拆分或缩小到您真正想知道的内容。这可能是为了放大 Hibernate 缓存性能问题。首先更具体地了解您使用的是哪个版本的 Hibernate。
-
嗯,问题的要点是“我想要更快的缓存”。如果这三个选项中的任何一个是可行的,我会很满意。
-
我认为这是跳跃点:“小于 2 倍”。在不知道您的应用程序在做什么的情况下,任何人如何解决这个问题?您能否整理出一个与您的应用程序类似的访问模式的示例或基准测试?
-
我也注意到了这一点。 L2C 与简单地在 SSD 上查询数据库的速度大致相同(在我的示例中为 28 毫秒与 33 毫秒)。 L2C 的第一次查询要慢得多!我预计 L2C 至少会快 2-3 倍,但我们拥有我们所拥有的。
标签: java performance hibernate caching hibernate-4.x