我目前正在开展类似电子商务网站的项目。数据库表中有数十万条记录。我还必须对它们使用连接操作来获取数据,因为项目中有查询构建器来选择数据条件。获取数据需要太多时间。因此,我使用限制作为每页的一些记录(例如10)。现在我开始了解memcached的概念。所以我想为我的项目使用memcached,因为它只需要花费太多时间。但仍有一些疑点。
所以我处于困境中,我应该选择memcached吗?如果任何人可以建议并回答解释,那么将不胜感激。
答案 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命令的结果,因为它确实有很大的帮助。