即使DBMS拥有自己的缓存,为什么我仍需要使用缓存服务器?

时间:2018-10-09 15:47:08

标签: mysql database caching memcached mediawiki

我最近熟悉memcached。那给我提出了一些严重的问题。 假设我有一个新闻Web应用程序。显然,最昂贵的工作是发送准备好的查询以从数据库中获取任何新闻内容。 通过假设数据库本身缓存新闻内容和查询计划,使用单独的缓存服务器有什么好处?

更多应用细节(虚构):

  • 数据库大小超过300GB(最好是MySQL或任何其他DBMS)
  • RAM内存为32GB
  • 数据库可能会或可能不会驻留在网络服务器中

===如果使用缓存服务器===

  • 三台服务器,每台服务器具有32GB内存

我知道像memcached这样的缓存服务器实际上使您拥有96GB的聚合缓存。但是另一方面,从Web服务器域到缓存服务器域至少应该有一些额外的请求。

我对客户提出的每个请求都需要经过的路径的理解如下:

如果使用缓存服务器:

Web服务器=>缓存服务器==缓存服务器内部是否存在数据? =>

  1. 是=>网络服务器=>客户端
  2. 否=>数据库服务器=> Web服务器=>客户端;还要向 缓存服务器

如果不使用缓存服务器:

Web服务器=>数据库服务器=> Web服务器=>客户端

如果Web服务器和DB服务器都放在同一台计算机上怎么办?这样我们将拥有: 网络服务器=>客户端

所以我的主要问题是:

  • 是否值得从Web服务器向其他服务器发出额外请求 而不是向数据库发出单个请求?
  • 我在这里错过了什么吗?
  • 还有其他解决方案吗?像Wikipedia这样的大型系统在此特定问题和缓存中使用什么方法?
  • 我们可以使用其他方法,例如使用任何特殊的缓存系统吗? 绑定到DBMS,每个服务器保留数据库,但仅缓存一个 它在内存中的分数。这样不仅可以使用其他服务器 用于高可用性和复制目的,但我们可以减少数量 的请求。

1 个答案:

答案 0 :(得分:0)

  • 首先,使用缓存来提高系统的性能。缓存和数据库之间的区别主要是 存储在数据库中的数据将保留在磁盘上,而在缓存中则将其存储在RAM中。因为从RAM访问数据比从磁盘访问数据更快。

  • 像MySQL这样的一些数据库是内置缓存的,但是它也没有什么问题,例如,如果对表进行任何更新(例如插入,删除和更新),存储在MySQL缓存中的数据将自动被删除。

  • 如果您仅要缓存几MB的数据,也不需要为缓存保留其他服务器。一些缓存系统,例如Memcached和Redis,您可以为缓存分配内存大小。如果缓存达到内存限制,则将根据我们配置的驱逐策略删除已存在的数据。另外,我们不仅使用缓存来缓存数据库查询结果,而且还可以缓存一些使用配置设置,而不是每次都从文件中读取它。