Hibernate缓存与映射 - 存储目的

时间:2015-10-08 10:21:22

标签: java hibernate dictionary ehcache second-level-cache

假设我有一张Master Data播种1次的桌子,很少会更新。它有一个扁平的结构实体,没有Lazy attributes

Address{
     id,
     country,
     state,
     city,
     pincode,
     area
}
  

案例-1:表有1000条记录

     

案例2:表格有100万条记录

使用案例 - 需要通过ID获取完整Address object。此表中的事务没有更新,仅用于显示目的,LOV,引用ID等。

  1. 考虑性能,内存使用情况,GC,搜索速度等,最好使用Hibernate缓存(id,object)或仅使用static HashMap (is as key, Address object as value)

  2. 我知道Hibernate 2nd level cacheehcacheInfinispan等)也使用深层库内的Map结构。所以在上面的情况下添加任何有用的东西,添加额外的Hibernate层。

1 个答案:

答案 0 :(得分:1)

Ehcache,Hazelcast(二级缓存)等功能比静态Hashmap更多。

1.限制内存中元素的最大数量

2.overflow to disk(如果超过上述数量)

3.设置元素的生存时间和空闲时间

4.允许在群集中复制

如果你想要这些功能,那么你应该去做。否则静态hashmap可以完成你的工作。如果您的记录得到更新,请在一段时间后刷新。

还有一件事,在这两种情况下,数据都会存储在内存中,或者你可以在堆上说。但是,如果您想存储数据 OFF堆,请阅读 MapDB

我已经将hazelcast作为二级缓存提供者。它还提供了分布式缓存,并且在群集环境中运行良好。

检查这些链接 Disk based HashMap Ehcache Vs Static map cache implementation