我正在使用 Rails 3.2 内容丰富的网站,在我们的主MySQL(MariaDB)表上有大约3m的记录。
在#show
操作中,我们会显示5个列表,其中包含20个相关记录(相同型号),每个列表使用不同的列进行匹配(如category_id
列)。
我们在这些相关内容部分遇到了很多的性能问题,我们正在寻找改进它的方法。
我们已经为所有列编制了索引,优化了查询(没有创建JOINS)并尝试片段缓存循环......但是,大多数查询大多需要500毫秒到3秒。
从现在的情况来看,我可以想象以下解决方案:
content/2/most_viewed_by_category
的密钥在Redis上存储 ID 列表,稍后使用此列表再次从数据库中获取记录。这个缓存可以持续3天而不会出现重大问题。解决方案3 是最简单的IMO,问题是缓存HIT会很小,因为有3m~记录,每个记录都有自己的缓存列表相关内容。
每个解决方案都有起起伏伏,也许还有别人可以指示我的东西。
有问题的数据库是MySQL(MariaDB),在我看来,它本身就是一个问题。