五分钟原则
时间相信大家都很熟悉,但五分钟原则又是什么呢?下面就跟小编一起来看一下吧
很久之前从 LSM 树论文的参考文献里找到了这一篇神秘的论文,之后花了相当大的精力都没有搞懂它在干什么 —— 直观上来说它就是在带我算账,但这账我越算越糊涂。
现在我终于搞懂了 Five Minutes Rule 的主要思想,没错,谈钱虽世俗但有用。于是我决定写一篇解释 Five Minutes Rule的博客。
0.硬件原状
- 磁盘,180MiB,可支持每秒 15 次访问 (15 a/s),每块售价 15k$。
- 磁盘和 CPU 之间的“通道”,要支持每秒访问磁盘 1 次,需要 1 k$ (1k $/a/s)。
- 内存,每 KiB 价格 5$
由于内存速度比磁盘快得多,所以可以假定内存的访问效率是没有上限的。
1. 实验设计
我们可以设置这样一个理想实验:假设有 1,000,000 条只读记录,每条大小为 1 KiB,现在要实现每秒 1,000 次访问 (1,000 a/s)
- 如果完全用磁盘来实现这个需求 —— 购买更多磁盘,磁盘之间可以并行访问,这样就能把记录均摊到磁盘上,每块磁盘承担较少的 IO
- 共需要约 67 块磁盘,总价格就是 1005k$
- 还需要传输通道,这又是额外的 1000k$
- 实现需求的总开销就是 2005k$
- 如果完全使用内存
- 需购买 1,000,000 KiB 的内存,总开销就是 5000k$
2. 局部性原理
局部性原理的大致意思就是在多数时间里只有少部分数据被取用。放到上述问题上,假设比例是 80% / 20%,那么有 800 a/s 的访问量都针对 200,000 条记录,而剩下的 200a/s 则来自于剩下的 800,000 条记录。如果按照局部性原理来优化上述的方案:
- 将访问较少的 800,000 条记录存储在磁盘上,200 a/s 的访问量大致需要 14 块磁盘,价格200k$
- 额外的通道价格 200k$
- 内存中存放访问较多的 200,000 条记录,需要 200,000KiB 内存,价格 1000k$
- 这样,总的开销就只有 1400k$ —— 而且还不用面临一大堆机械硬盘老化带来的各种问题
3. Five minutes rule
那么所有这一切和本文的主题 —— Five minutes rule 有什么关系呢?
回到第一节,我们可以这么算账:
- 如果将一条数据存放在磁盘上,那么实现对这条数据 1 a/s 的访问就需要 2k$
- 如果将数据放在内存中,无论访问频率如何,总是需要5$
假设这条数据实际的访问频率为 f,显而易见的是,访问频率越低,把数据放在内存里就越不划算。而频率的分界线,用方程 f * 2k$ == 5$
可以解出,答案是 1/400,也就是 400 秒一次。400秒“约”为5分钟(原文如此,不知道作者数学怎么学的),因而这篇论文的名字就叫 Five minutes rule。如果局部性原理阐述的是优化对“热”数据的访问这一思路,那么 Five minutes rule 则是定义了“热”数据本身。
随着时间的推移和硬件技术的发展,硬件变的越来越强大且可靠,而 Five minutes rule 的实际规则也在不断演进,在 1997 年发表的 Five minutes rule ten years later 中,“分界”频率变成了 1/60,也就是一分钟一次。而在 2008 年的 Five minutes rule twenty years later 中... 抱歉我还没看这论文,等我看了再写。
4.结语
我还是搞不懂 LSM tree 的狗币作者为什么要引用这篇文章,也许我得重新读一下他在 93 年发的那篇 SB tree。