对于大量数据,缓存是不是值得?

Posted

技术标签:

【中文标题】对于大量数据,缓存是不是值得?【英文标题】:Is caching worth it, for huge amount of data?对于大量数据,缓存是否值得? 【发布时间】:2019-11-09 03:39:29 【问题描述】:

假设我们有一个键值对数据500TB。我们可以使用2.5TB 内存来缓存这些对以供将来的请求使用。这些请求有些随机。

The probability of cache hit would be 2.5/500 = 0.5%

我知道,如果我们使用 LFU eviction,命中率可能会随着时间的推移而增加,因为随着时间的推移,键会更频繁地保留在缓存中,从而提高缓存命中率。

所以,如果系统从存储10K QPS读取的吞吐量,那么使用缓存将提高速率0.05%(忽略内存寻道时间)。

那么吞吐量将是10,050 QPS

在这种情况下使用缓存的效率如何?

我们应该不使用缓存吗?

更新

我想我这里有一个错误。如果我们有 100% 的命中率,那么吞吐量将是 1MQPS。如果我们的命中率为 0%,那么吞吐量将为 10KQPS。

具有 0.5% 的命中率(假设线性关系)产生于

(0.5*(1M-10K)/100)+10K = 14950 QPS 

吞吐量增加了 50%。

【问题讨论】:

【参考方案1】:

“不知何故随机”是关键。

如果请求是真正随机的,则缓存不太可能提供帮助。你的逻辑是正确的。但在实际系统中,事实证明许多数据存储具有非统一的、高度相关的访问模式。

这仍然适用于大量数据。总共有多少数据并不重要。重要的是经常需要多少。

[编辑] 更新没有意义。您在那里平均速度,但您需要平均操作时间。

【讨论】:

以上是关于对于大量数据,缓存是不是值得?的主要内容,如果未能解决你的问题,请参考以下文章

能否使用require('.json')的方式加载大量JSON文件?

与使用 WebSockets 发送大量消息相比,发送大量消息是不是有很多开销?

#导入Word文档图片#值得收藏:当向数据库导入大量数据时,mysql主键唯一键重复插入,如何丝滑操作并不导入重复数据呢

如何优化缓存架构?--针对于热key问题

Java实现缓存(LRU,FIFO)

当数据不是静态的时,我应该如何保存大量数据。 iOS、可可触控、Obj-C