使用ehcache作为内存数据存储 - 高内存使用率

时间:2014-12-30 09:43:49

标签: ehcache in-memory-database

我们正在尝试解决遗留UI和遗留架构的问题,其中在多用户环境中以5分钟的间隔调用具有多个联接的复杂查询,对于一百万条记录,性能大幅下降。为了解决这个问题,我们尝试使用远程服务器(具有8GB RAM和Weblogic应用程序的VM)上的ehcache使用RMI和ehcache的内置查询工具将查询中的整个结果集保留在内存中,我们能够获得良好的性能来获取记录。需要。我们构建了一个API,可以在发生更改或插入时帮助监视和更新每条记录。我们面临的问题是将整个结果集(100万条记录)缓存在ehcache的内存中并经常查询它导致几乎6GB +的使用率,查询性能逐渐降低,直到看起来GC完成然后性能再次出现恢复正常(观察Visualvm上的用法)。结果集中的每条记录都存储为一个对象,其主键值为其键。 解决这个问题的好方法是什么?考虑将对象设置为永不过期,并且在更新时使用代码手动删除所有不需要的记录 有没有更好的方法来看待这个问题?

1 个答案:

答案 0 :(得分:0)

快速选项列表:

  • 如果您可以轻松地对数据进行分片,则可以在不同的VM中拆分缓存。通过在不同的JVM中使用多个缓存,您可以自动减少每个缓存的内存占用,尽管由于多个JVM,整体内存使用量会增加。
  • 考虑升级Ehcache以获得BigMemory Go支持,这将允许您使用堆外内存,从而降低GC压力。这是需要许可证的商业产品。