【问题标题】:Is it good to use memcached in fully dynamic and heavy database website?在完全动态和重型数据库网站中使用 memcached 好不好?
【发布时间】:2016-04-23 12:29:45
【问题描述】:
我目前正在从事类似于电子商务网站的项目。数据库表中有数十万条记录。我还必须对它们使用连接操作来获取数据,因为项目中有 query builder 来选择数据标准。获取数据需要太多时间。所以,我使用限制作为每页的一些记录(例如 10)。现在我了解了memcached的概念。所以我想在我的项目中使用 memcached,因为它只会花费太多时间。但仍有一些疑问。
-
缓存文件过多会影响吗?我的意思是会创建太多的文件,因为每个模块的每一页,都会有一个缓存文件。所以数字会去大约 10000 个缓存文件。
- 让我们假设没有文件没有任何问题。但是,当从表格中间添加或删除任何表格行时,如何使用 replace() 更新文件。在这里,表格几乎每周都会更新。
所以我处于两难境地,我应该去还是不去 memcached?如果哪位大神能给出建议和解释,将不胜感激。
【问题讨论】:
标签:
php
mysql
caching
memcached
query-builder
【解决方案1】:
如果您的网站执行许多相同的 MySQL 查询并经常返回相同的数据,那么是的,运行 memcached 可能会有一些好处。
问题:
“有数十万条记录...获取数据需要太多时间”。
这可能表明您的架构有问题。正确索引,即使使用 JOIN,查询也应该能够快速执行(EXPLAIN 查询,看看是否可以改进。
问题 1 的答案
缓存文件过多不会有问题。 Memcached 将所有缓存信息存储在内存中(因此得名),因此不使用磁盘文件。缓存对象存储在 RAM 中,可直接从 RAM 访问。
问题 2 的答案
不完全确定您在此处询问的内容,但如果您的应用程序更新或删除数据库中的信息,那么删除受更新和删除影响的缓存项至关重要。如果应用程序不移除受此类操作影响的缓存项,则下次查询数据时,可能会返回不再有效的缓存结果。确保缓存的任何数据都设置了适当的过期时间,或者当数据库中的数据发生更改时,应用程序会将它们从缓存中删除。
希望对您有所帮助。
【解决方案2】:
我不会从 Memcached 开始,而是从弄清楚瓶颈是什么开始。您的表大约有一百万行。我不知道一行的大小,但我有根据的猜测是它小于 1K,因为浏览器窗口可以容纳来自一条记录的信息。
所以你的数据库中可能有 1G 的信息。如果我错了纠正我。如果是这样,那么整个数据库应该由 MySQL 自动缓存在 RAM 中。
既然您的数据库完全在 RAM 中,那么通过适当的索引组织,查询的复杂性应该与结果集的数量成线性关系,结果集的数量以千字节为单位,因为它适合浏览器窗口。
所以我的建议是确定数据库的大小并查看“top”命令的结果,以了解 MySQL 消耗了多少内存。如果您确保您的数据库完全位于内存中,然后针对您最常用的查询运行解释命令,并根据解释的结果将一些索引添加到您的数据库中。即使您的数据库大于 RAM 的数量,我仍然建议您查看 explain 命令的结果,因为它确实很有帮助。