【问题标题】:Caching large data sets with hibernate/jpa/memcache?使用 hibernate/jpa/memcache 缓存大型数据集?
【发布时间】:2013-06-05 06:05:23
【问题描述】:

我是开源堆栈的新手,并且一直在使用 hibernate/jpa/jdbc 和 memcache。每个 jdbc 查询我都有一个大型数据集,并且可能会有一些我最终绑定到图表的大型数据集。

但是,我非常关注性能,而不是在每次页面加载时访问数据库以将其显示在我的网页图表上。

是否有一些示例说明如何(memcache、redis、本地或分布式)以及在何处缓存此数据(jSON 或原始结果数据)以加载到内存中?我还需要弄清楚如何刷新缓存,除非它是基于时间的驱逐标记算法(即 30 分钟过期,所以从数据库查询中获取新数据而不是使用缓存,或者可能每隔 xhrs/min/ 自动将数据馈送到缓存中)等)。?

谢谢!

【问题讨论】:

    标签: java hibernate jpa redis memcached


    【解决方案1】:

    这是典型的问题和解决方案不是直截了当的。有很多因素决定了你的设计。这是我们前一段时间所做的

    • 由于我们提取数据的查询有点复杂执行需要大约一分钟)并且数据集很大,我们填充了内存缓存从用于每 1 小时从数据库中提取数据并将其推送到 memcached 的批处理中。通过使过期缓存大于批处理间隔,我们确保缓存中的数据始终位于何处。
    • 动态缓存还有另一个用例,在收到数据请求时,我们首先检查 memcached,如果没有找到数据,则查询数据库,获取数据,将其推送到 memcached并返回结果。但我建议仅当您的数据库查询简单且快速足以不会导致整体响应不佳时才使用此方法。
    • 您也可以使用 Hibernat 的second level cache。有效使用此功能取决于您的数据库架构、查询等。

    【讨论】:

      【解决方案2】:

      Hibernate 内置了对二级缓存的支持。以 EhCache 为例。

      另见:http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-cache

      【讨论】:

        猜你喜欢
        • 2011-05-07
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多