Mysql 如何改进相关内容的获取?

Mysql 如何改进相关内容的获取?,mysql,ruby-on-rails,caching,Mysql,Ruby On Rails,Caching,我正在开发一个Rails 3.2高度面向内容的网站,在我们的主MySQL(MariaDB)表中有大约3百万条记录 在#show操作中,我们显示了5个列表,其中包含20条相关记录(属于同一型号),每个列表使用不同的列进行匹配(如类别id列) 我们在这些相关内容部分遇到了很多性能问题,我们正在寻找改进的方法 我们已经为所有列编制了索引,优化了查询(没有进行连接),并尝试了片段缓存循环。。。尽管如此,大多数查询都需要500毫秒到3秒钟的时间 从现在的情况来看,我可以想象以下解决方案: 添加Elasti

我正在开发一个Rails 3.2高度面向内容的网站,在我们的主MySQL(MariaDB)表中有大约3百万条记录

#show
操作中,我们显示了5个列表,其中包含20条相关记录(属于同一型号),每个列表使用不同的列进行匹配(如
类别id
列)

我们在这些相关内容部分遇到了很多性能问题,我们正在寻找改进的方法

我们已经为所有列编制了索引,优化了查询(没有进行连接),并尝试了片段缓存循环。。。尽管如此,大多数查询都需要500毫秒到3秒钟的时间

从现在的情况来看,我可以想象以下解决方案:

  • 添加ElasticSearch并使用它查找相关内容
  • 添加清漆并缓存整个页面
  • 创建一个中间的“相关”服务类,该类将获取每个相关记录列表,并在Redis上存储一个ID的列表,其键类似于
    content/2/most\u viewsed\u by\u category
    ,然后使用此列表再次从数据库中获取记录。此缓存可以持续3天而不会出现重大问题
  • 解决方案3是最简单的IMO,问题是缓存命中率很小,因为有3百万条记录,每个记录都有自己的相关内容缓存列表

    每个解决方案都有它的起伏,也许你们可以告诉我一些其他的东西


    所讨论的数据库是MySQL(MariaDB),在我看来,这本身就是一个问题。

    您也可以通过添加更多内存或使用ssd来升级服务器。您如何进行片段缓存?还有,你渴望装货吗?例如,是否存在n+1个查询?您可以使用Bullet gem()帮助查找n+1。Fastly(Fastly.com)是一个非常快速的清漆服务,它可以提供帮助,但是,这只是掩盖了潜在的问题。