缓存 MySQL 结果时的收益和性能下降
Gains and performance degradation when caching MySQL results
我已经看到一些框架使用文件系统中的普通文件缓存来自数据库的结果(在这种情况下不考虑内存缓存数据)并且一旦对数据库进行更改或特定的 TTL 结束就会使这些结果无效。由于数据库也是一个文件,除了在一个用例中,从不同来源对数据库进行大量并发 SELECT 查询以将负载分配到不同文件之外,这对我来说似乎有点多余。
除了体面的设计和抽象之外,是否有任何理由将这种缓存技术用于流量和并发性更少且几乎可以忽略不计的小型私人项目?
缓存有两方面的帮助:
- 大数据集、复杂查询(连接、联合、子查询等)
- 数据库服务器查询解析
处理缓存时要问自己的问题:
- 我的数据经常变化吗?
- 如果我使用它会提高速度吗?
如果您的数据经常更改或性能提升可以忽略不计,我建议不要使用缓存。维护并确保它没有损坏等是另一回事。如果性能明显更好,那就去做吧。
此外,基于文件的缓存通常很慢并且仅用于大数据集
经验法则:不要将缓存放在缓存前面。 MySQL 已经做了一些工作来避免做 I/O;您描述的缓存似乎增加了 I/O 负载。
此外,如果缓存机制增加了 RAM 消耗,那么它会占用 RAM,否则可用于加速 MySQL。例如,不要将 memcached 与 MySQL 放在同一台服务器上。 Memcached 需要大量 RAM。
KISS -- 你是不是一个小项目?为什么要用不太可能带来很多好处的东西来复杂化它。
如果您的应用程序运行缓慢,那可能是因为
- 缺少 'composite' 索引;
- 公式不当
SELECT
;
- 十几种不太常见但易于修复的原因中的任何一种。
但很少因为没有使用额外的缓存。
我已经看到一些框架使用文件系统中的普通文件缓存来自数据库的结果(在这种情况下不考虑内存缓存数据)并且一旦对数据库进行更改或特定的 TTL 结束就会使这些结果无效。由于数据库也是一个文件,除了在一个用例中,从不同来源对数据库进行大量并发 SELECT 查询以将负载分配到不同文件之外,这对我来说似乎有点多余。
除了体面的设计和抽象之外,是否有任何理由将这种缓存技术用于流量和并发性更少且几乎可以忽略不计的小型私人项目?
缓存有两方面的帮助:
- 大数据集、复杂查询(连接、联合、子查询等)
- 数据库服务器查询解析
处理缓存时要问自己的问题:
- 我的数据经常变化吗?
- 如果我使用它会提高速度吗?
如果您的数据经常更改或性能提升可以忽略不计,我建议不要使用缓存。维护并确保它没有损坏等是另一回事。如果性能明显更好,那就去做吧。
此外,基于文件的缓存通常很慢并且仅用于大数据集
经验法则:不要将缓存放在缓存前面。 MySQL 已经做了一些工作来避免做 I/O;您描述的缓存似乎增加了 I/O 负载。
此外,如果缓存机制增加了 RAM 消耗,那么它会占用 RAM,否则可用于加速 MySQL。例如,不要将 memcached 与 MySQL 放在同一台服务器上。 Memcached 需要大量 RAM。
KISS -- 你是不是一个小项目?为什么要用不太可能带来很多好处的东西来复杂化它。
如果您的应用程序运行缓慢,那可能是因为
- 缺少 'composite' 索引;
- 公式不当
SELECT
; - 十几种不太常见但易于修复的原因中的任何一种。
但很少因为没有使用额外的缓存。