在完全动态和繁重的数据库网站中使用memcached是否好


Is it good to use memcached in fully dynamic and heavy database website?

我目前正在从事类似于电子商务网站的项目。数据库表中有数十万条记录。我还必须对它们使用连接操作来获取数据,因为项目中有查询生成器来选择数据条件。获取数据需要太多时间。因此,我使用限制作为每页的一些记录数(例如 10 条)。现在我开始了解内存缓存的概念。所以我想在我的项目中使用 memcached,因为它只需要一次就会花费太多时间。但仍然存在一些疑问。

  1. 缓存文件过多会影响吗?我的意思是将创建太多文件,因为对于每个模块的每个页面,将有一个缓存文件。所以数字将去大约 10000 个缓存文件
  2. 让我们假设没有任何文件的问题。但是,当从表中间添加或删除任何一行表时,使用 replace() 更新文件呢?在这里,表格几乎每周都会更新。

所以我进退两难,我应该去找memcached吗?如果有人可以建议并回答解释,那么将不胜感激。

如果您的网站执行许多经常返回相同数据的相同MySQL查询,那么是的,运行memcached可能会有一些好处。

问题:

"有数十万条记录...获取数据需要太多时间"。

这可能表示您的架构存在问题。 正确索引,即使使用 JOIN,查询也应该能够快速执行(<0.1 秒)。 对需要很长时间才能运行的查询运行EXPLAIN查询,看看是否可以改进它们。

对问题1的回答

缓存文件太多不会有问题。 Memcached 将所有缓存的信息存储在内存中(因此得名),因此不使用磁盘文件。 缓存的对象存储在 RAM 中,并直接从 RAM 访问。

对问题2的回答

不完全确定您在此处询问的内容,但是如果您的应用程序更新或删除数据库中的信息,那么删除受更新和删除影响的缓存项至关重要。 如果应用程序不删除受此类操作影响的缓存项,则下次查询数据时,可能会返回不再有效的缓存结果。 确保缓存的任何数据都设置了适当的过期时间,或者当数据库中的数据发生更改时,应用程序会将其从缓存中删除。

希望有帮助。

我不会从Memcached开始,而是从找出瓶颈是什么开始。您的表大约有一百万行。我不知道一行的大小,但我有根据的猜测是,基于浏览器窗口容纳来自一条记录的信息这一事实,它小于 1K。

所以它可能是你数据库中的1G信息。如果我错了,请纠正我。如果这是真的,那么整个数据库应该通过MySQL自动缓存在RAM中。

现在您的数据库完全在 RAM 中,那么通过索引的正确组织,查询的复杂性应该相对于结果集的数量呈线性关系,结果集以千字节为单位,因为它适合浏览器窗口。

所以我的建议是确定数据库的大小并查看"top"命令的结果,以便知道MySQL消耗了多少内存。如果您确保数据库完全位于内存中,则针对最常用的查询运行 explain 命令,并根据 explain 的结果向数据库添加一些索引。即使您的数据库大于RAM量,我仍然建议您查看解释命令的结果,因为它确实有很大帮助。