【问题标题】:Cache for large read only database recommendation缓存大型只读数据库推荐
【发布时间】:2011-02-17 21:57:18
【问题描述】:

我正在使用 Spring、Hibernate 和 Mysql 构建站点。 mysql 数据库包含有关坐标和位置等的信息,它永远不会仅被查询更新。该数据库包含 15000 行坐标和 48000 行坐标连接。 每次处理请求时,应用程序都需要读取所有这些坐标,这大约需要 3-4 秒。 我想设置一个缓存,以允许快速访问数据。 我目前正在研究 memcached,请问这是否是我的最佳选择?

【问题讨论】:

  • memcached 肯定是一个很好的起点。迄今为止,它是同类产品中使用最广泛的一种,并且可以很好地扩展。

标签: database hibernate caching


【解决方案1】:

虽然有针对 Memcached 的 CacheProvider 实现,但我的想法如下:

  • Memcached 不是官方的supported,上面的 CacheProvider 是第三方实现(虽然这可能不是问题)。
  • Memcached 运行进程外,它是客户端服务器缓存,每个请求都有网络和编组开销
  • 像 EhCache 这样的缓存在进程内(在同一个 JVM 中)运行,因此访问速度更快(无论您使用内存存储还是磁盘存储),并且不会有任何网络通信集群节点之间的只读模式,即完全没有开销。
  • 我认为 Ehcache 会明显更快(请参阅下面的参考资料)。

换句话说,我会选择 Ehcache。

参考资料:

【讨论】:

  • 谢谢pascal,我也尝试过ehcache,我遇到的问题是我需要所有数据永久保留在缓存中,这可以用ehcache吗?
  • @paddydud 是的,在你的缓存中设置eternal="true" configuration
【解决方案2】:

有趣的问题。我已经非常成功地在一个休眠项目中使用了 ehcache,但是我不仅拥有只读数据。

Memcached 最初并不是为与类似休眠的上下文一起使用而设计的,尽管我看不出它不能使用的任何原因。在您的上下文中使用 memcached 的唯一缺点是您可能不需要时髦的分布式缓存功能,因为您可能在一台服务器上有足够的内存来处理您的负载,因此您不会从客户端服务器开销中获得任何收益内存缓存。

我认为您不会后悔选择使用 memcached 的决定。它被广泛用于缓存网站,我看不出你为什么不能在你的上下文中使用它。

【讨论】:

【解决方案3】:

您是否也看过 Hibernate 分片? Hibernate 允许您将不同的行放在不同的数据库中,从而使查找更容易。它在过去 3 年里一直可用。 This 是一个很好的起点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 2020-11-13
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多