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

时间:2016-01-18 10:55:39

标签: php mysql caching memcached query-builder

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

  1. 缓存文件太多会影响吗?我的意思是,对于每个模块的每个页面,将创建太多文件,将有一个缓存文件。因此,数字将大约 10000个缓存文件
  2. 我们假设没有任何文件问题。但是当从表的中间添加或删除任何行的表时,使用replace()来强制更新文件。在这里,表几乎每周都会更新
  3. 所以我处于困境中,我应该选择memcached吗?如果任何人可以建议并回答解释,那么将不胜感激。

2 个答案:

答案 0 :(得分:2)

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

<强>问题:

  
    

“有数十万条记录......获取数据需要花费太多时间”。

  

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

回答问题1

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

回答问题2

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

希望有所帮助。

答案 1 :(得分:0)

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

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

既然您的数据库完全在RAM中,那么在正确组织索引的情况下,查询的复杂性应该与结果集的数量呈线性关系,因为它适合浏览器窗口,因此以千字节为单位进行测量。

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