【问题标题】:Cache in a distributed web application - complex queries use case分布式 Web 应用程序中的缓存 - 复杂查询用例
【发布时间】:2014-02-28 10:51:33
【问题描述】:

我们正在开发一个分布式 Web 应用程序(3 个带有负载平衡器的 tomcat)。

目前我们正在寻找缓存解决方案。这个解决方案当然应该是集群安全的。 我们使用的是spring,jpa(mysql)

我们考虑了以下解决方案:

创建一个运行简单缓存的缓存服务器,每个 tomcat 的所有 DB 操作都将委托给它。 (Web 应用程序中的 dao 层将与该服务器通信,而不是访问数据库本身)。这很吸引人,因为缓存服务器配置上的缓存可以最小化。

我们现在想知道的是:

如果将复杂查询传递给 cacheServer(即使用多个连接和 where 子句进行选择),标准缓存表单(映射)究竟如何处理这个问题?这是否意味着我们必须单枪匹马地为每个复杂查询实现查找并将其调整为映射搜索而不是 DB?

P.S - 这种架构有可能在其基础上存在缺陷,因此提出了这样一个奇怪的问题,如果是这种情况,请提出替代方案。

最好的,

【问题讨论】:

    标签: java mysql sql spring caching


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      如果我理解正确,您正在尝试实现方法缓存,使用 DAO 方法的参数作为键,使用结果对象/列表作为值。

      这应该可行,但是您对复杂查询的担忧是有效的,您最终会在缓存中获得大量条目。对于复杂的查询,只有使用与缓存中的参数完全相同的参数执行相同的查询时,才会访问缓存。您必须弄清楚缓存这些复杂查询是否有用,是否有可能会被命中,这实际上取决于应用程序的业务逻辑。

      另一种选择是实现具有多个级别的缓存:二级缓存和查询缓存,使用 ehcache 和大内存。您可能会发现这很有用: http://ehcache.org/documentation/integrations/hibernate

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-05
        • 2013-04-12
        • 1970-01-01
        • 1970-01-01
        • 2013-02-10
        • 1970-01-01
        • 2012-06-02
        • 2015-03-13
        相关资源
        最近更新 更多