mysql - 对于该应用程序来说,最好的数据库缓存是什么?

标签 mysql database caching memcached

我已经完成了 Web 应用程序开发的 70% 左右,该应用程序包含一个大约 50,000 行的大型数据表。

该应用程序本身是一个过滤应用程序,提供各种不同的方式来过滤此表,例如按数字进行范围过滤、最终执行正则表达式过滤的拖放过滤、实时文本搜索等等。

因此,我以模块化方式编码了 MySQL 查询,以便实际查询本身根据发生的过滤类型动态组合在一起。

目前,每个过滤操作(总共)平均需要 250-350 毫秒。例如:-

用户捕获可视 slider 的一端,将其向内拖动,当他/她松开时,我的 PHP 代码会动态地将范围过滤查询组合在一起,并将结果作为 JSON 响应返回。从用户松开 slider 到用户收到所有数据并重新绘制表格的总时间平均在 250-350ms 之间。

我担心进一步的可扩展性,因为用户可能会在短时间内执行大量过滤操作,以便检索他们正在查找的数据。

我曾尝试使用 memcached 进行一些奇特的缓存过期工作,但无法让它与我的动态生成的查询一起正确运行。尽管所有内容都会正确缓存,但当查询更改并保持数据相关性时,我无法使缓存过期。然而我对 memcached 非常缺乏经验。我最初的几次尝试让我相信 memcached 不是适合这项工作的工具(由于查询的高度动态性)。尽管这个应用程序最终可能会出现非常高的并发使用。

所以...我的问题实际上是,是否可以向此类应用程序添加任何缓存机制/层来减少服务器上的点击次数?牢记动态查询。

或者...如果 memcached 是完成这项工作的最佳工具,而我在早期尝试中遗漏了一 block 拼图,您能否提供一些有关在此类应用程序中使用 memcached 的信息或指导?

非常感谢所有回复的人。

编辑:我应该提到数据库是 MySQL。该网站本身运行在带有 nginx 代理的 Apache 上。但这个问题纯粹与加速和减少数据库点击有关,其中有很多。

我还应该补充一点,所引用的 250-350 毫秒往返时间完全是远程的。就像从远程计算机访问网站一样。时间包括DNS查找、数据检索等。

最佳答案

如果我正确理解您的问题,那么您本质上是在寻求一种减少对数据库的查询数量的方法,即使完全相同的查询很少。

您基本上有三个选择:

  1. 承受对数据库的大量查询,使用适当的索引优化数据库并尽可能规范数据。确保避免查询构建中的正常性能陷阱(例如 ON 子句或 WHERE 子句中的大量 OR)。提供混搭查询等 View 。
  2. 将通用查询缓存在 memcached 或类似的中,即没有部分或全部过滤器。并在应用层应用过滤器。
  3. 实现搜索索引服务器,例如 SOLR。

我建议你先做第一个。即使对于复杂的查询,250~300 毫秒的往返时间听起来也有点高,而且听起来只要改进现阶段已有的功能就可以获得很多好处。 对于更高的工作负载,我建议使用第 3 号解决方案,它将帮助您实现您想要做的事情,同时成为处理大量不同查询的冠军。

关于mysql - 对于该应用程序来说,最好的数据库缓存是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8317318/

相关文章:

SQL获取两个日期之间的工作日数

mysql - 为什么使用 FORMAT 的 MySQL 会忽略 ORDER?

MySQl 返回与第二个表值匹配 AND/OR 的记录

mysql - Concrete5 SQLSTATE[HY000] [2002] 本地主机上没有这样的文件或目录

sql - 关于微服务架构中容器的可扩展性

database - Redis + “source of truth” 数据库一致性

c++ - 在 C++ 中,如何让(嵌套的)比较仿函数引用封闭类的数据?

caching - 什么是缓存驱动程序中的分布式原子锁?

asp.net - 与浏览器缓存相比,输出缓存的优势

mysql - mySQL 中的条件查询