【发布时间】:2011-03-26 08:30:15
【问题描述】:
我对缓存策略和实现还很陌生。我正在开展一个数据库密集型项目,但信息也会定期更新和更改。
我已经找到了足够的信息来大致了解如何开发缓存功能,但我不确定的是一般策略。
如果我缓存所有查询结果并按逻辑事物对它们进行分组,我可以在有意义的触发器上清除它们,我的缓存中可能会有数万个(至少)小文件。只缓存大查询结果会更有意义吗?
我知道这是一个特定于硬件的问题,但一般来说,缓存在多大的文件量下变得毫无意义?这意味着,如果您正在加载包含所有这些小文件的文件系统,那么对它们的访问最终会变得足够慢,以至于您还不如一开始就没有缓存信息?
谢谢大家,我对您提供的任何意见都很感兴趣
编辑:基于关于这绝对是特定于应用程序的响应,让我以这种方式提出这个应该是普遍的问题:
假设我有一个应用程序依赖于一个包含 1,000,000 个项目的表...
进行查询以直接从数据库中检索其中一项,还是从包含 1,000,000 个文件的缓存目录中检索其中一项更快,每个文件都包含其中一项的详细信息?
编辑:显然 100,000 不足以获得有效答案,让我们将其设为 1,000,000。有人想去1,000,000,000吗?因为我能做到……
【问题讨论】:
-
既然您在征求人们的意见,并且没有比其他解决方案更好的解决方案(至少,在没有指定您的要求和用例的情况下),您可以考虑将其更改为“社区 wiki”。
-
@Michael - 我的用例或要求并不是那么具体。我只是在问,如果我开始将每一条信息都缓存到文件中,那么在某些时候,纯粹的文件量会首先降低缓存带来的性能提升吗?
-
Mysql 应该并且可以在 100k 行这样的小卷上运行得非常快。所以你有足够的性能储备,不会成为缓存狂。
-
也不要忘记,当你缓存很多时 - 你必须不要忘记缓存失效。失效逻辑是您失去部分缓存优势以及应用程序代码质量/可读性百分比的地方。
-
@Chris,对。您的答案仍会根据文件的大小、读/写频率、支持此功能的系统、运行的硬件而改变。如果您提供一些具有特定要求的特定场景,那么您就有问题了。但是,当您的问题与您的问题一样开放时,社区更喜欢将这些类型的问题作为“wikis”提供,这样的好处是可以提供广泛的答案,而不会影响解决方案的质量。 (meta.stackexchange.com/questions/11740/…)