我是Ehcache的新手,正在寻找如何做到这一点,但现在很确定这是否是正常用例。我正在研究一个不是传统Web应用程序的应用程序,它的功能一次只能由少数人使用,用于从非常大的数据集中检索数据,而不是每次对数据库进行调用时想要使用缓存来缓存这个大表。但是,有可能将新条目添加到此表中,并且我需要将其反映在缓存中,但我不希望每次重新加载整个缓存都是相当大的。有关如何处理这些/更多资源的任何建议,我们感激不尽。Ehcache,Hibernate,在添加新条目时更新超大型表的缓存?
0
A
回答
1
您应该了解Hibernate query cache。简而言之:它可以在二级缓存(L2
)之上工作并存储查询结果。 但是它只存储查询应该返回的记录的id,而不是整个列表。这意味着你需要有L2工作和微调。
在您的方案中,假设您在表T
中有1M个记录,并且平均返回1K的查询。当您第一次运行此查询就会错失查询缓存和:
- 运行SQL
- 取1K记录
- 把所有的人都在L2
- 把1K IDS查询缓存中
下一次执行查询时,它会打到查询缓存并查找L2的所有结果。当你修改表T
时,有趣的部分来了。 Hibernate会发现查询缓存中的结果可能是陈旧的,它会使整个缓存失效,而不是L2。它基本上会重复1-4点,但只刷新查询缓存(表格T
中的大多数实体已经在L2中)。
在某些情况下,它工作的很好,在其他情况下,它会在不可预测的时刻引入N + 1问题。这只是冰山一角,你应该非常小心,因为这种机制非常脆弱,需要很好的理解。
相关问题
- 1. 添加条目后表未更新
- 2. 添加数据库条目时,缓存的内容是否会更新?
- 3. 更新超过25,000个条目的表
- 4. 在使用Spring/EHCache加载时刷新缓存
- 5. Hibernate + Ehcache更新中断测试套件
- 6. 在Spring Boot初始保存后更新Hibernate存储库条目
- 7. Hibernate的二级缓存+的Ehcache问题
- 8. 在大型mysql表中添加新列
- 9. 在添加新条目时使用jpa/hibernate增加Postgresql中的值弹簧
- 10. Ehcache:从缓存中删除条目存储为列表
- 11. Kohana 3更新/添加相关条目
- 12. 更新数据库表更新缓存
- 13. 更新大表超时没有错误
- 14. 如果在mysql表中不存在,添加一个新条目
- 15. Hibernate和EhCache故障缓存集合
- 16. 将新条目添加到Access表
- 17. 向ListView添加新条目
- 18. 如何在数据库中添加新条目时更新PyQt中的TableView?
- 19. 如何使用Ehcache中的SimpleCachingPageFilter更新或无效缓存?
- 20. 节点,socket.io - 当新条目添加到新闻源时更新客户端?
- 21. CakePHP:hasOne相关表在更新时保存多个条目
- 22. 将现有条目添加为新创建条目的关联并获取新创建/更新条目
- 23. 如何更新在Java Spring框架的高速缓存上创建新条目
- 24. Ecto - 表条目未更新
- 25. Observable Collection添加项目时未更新
- 26. 更新一个星列直到根节点添加新条目
- 27. datagridview:在顶部添加新条目
- 28. Outlook:添加或更新日历条目时运行代码?
- 29. 将列添加到表后无法更新旧条目Rails 3.1
- 30. ehcache - hibernate无法从缓存中加载多对多关联?
只是一个额外的评论:“Hibernate会发现查询缓存中的结果可能是陈旧的,它会使整个缓存失效,但不会L2”。当应用程序遇到查询使用的表(更新,插入,删除数据)或不时(无论先发生什么)时,Hibernate将使查询缓存失效。因此,如果直接更改数据库中的数据,Hibernate将不会知道它,并可能在认为缓存仍然有效(即:缺失数据)的同时返回陈旧结果。 – jpkrohling 2011-03-04 10:13:05