缓存资金与数据库级指数?

时间:2011-03-28 05:49:39

标签: ruby-on-rails performance caching indexing

Cache Money gem是否消除了对DB级索引(通常用于改进查询检索的索引)的需求?

2 个答案:

答案 0 :(得分:1)

缓存=查询的答案是从缓存(RAM)中检索的,如果它们存在的话。只有在缓存未命中时才会访问数据库。

索引=帮助数据库更快地回答一些查询(更简单的定义,但这里我的目的已足够)。

因此,缓存通过根本不访问数据库来加速查询,而索引会加速通过缓存并命中数据库的查询。

您可以从缓存中获得的好处取决于您的应用程序的细节。如果大多数查询都要求提供相同的数据,或者您的更新比读取少,那么使用缓存层应该是个好主意。但是,即使在我见过的最佳场景中,仍有15-20%的查询仍然可以访问数据库。这意味着你不能单独依赖缓存。

但最重要的是 - 数据库索引很容易定义,除非你变得庞大,否则通常不需要维护。缓存otoh要复杂得多 - 对于需要安装,配置和维护memcached的cache-money gem。这不是火箭科学,但仍会在数据库之上增加另一层复杂性。换句话说,这通常是过早优化。 我建议您从数据库索引开始,只有在发现确实需要它时才添加缓存层。

答案 1 :(得分:0)

没有什么可以取代对索引的需求。

缓存层可能会更改工作负载并降低数据库的负载,从而减轻丢失索引的影响。使用缓存层时,您可能需要其他索引才能获得最佳性能,但如果您希望获得最佳性能,则仍需要它们。