每个程序员都需要知道的数字(续)
High Scalability - High Scalability - Numbers Everyone Should Know列举了另外一些数字:
写很昂贵
- 写是transactional的
- disk access意味着disk seek
- 经验法则:disk seek需要10毫秒
- 算一算:1s/10ms = 100 seeks/s,每秒最多100次disk seek
- 和数据的大小的形状有关系,批量处理。
读很便宜
- 都不需要transaction
- 数据从磁盘中读取一次,很容易就被缓存
- 所有后续的读取都是从内存来的
- 经验法则:内存中读取1m的数据需要250微秒
- 算一算:1s/250usec=4g/sec,美妙最多读4g的数据。对于1m的数据,每秒可以取4000次
一些数字
- L1缓存寻址需要0.5纳秒
- branch mipredict需要5纳秒
- L2缓存需要7纳秒
- mutex lock/unlock需要100纳秒
- 内存寻址需要100纳秒
- 压缩1k的数据需要10000纳秒
- 通过1gbps的网络发送2k的数据需要20000纳秒
- 内存中读取连续的1m数据需要250000纳秒
- round trip within same datacenter需要500000纳秒
- 硬盘须知需要10000000纳秒
- 从网络上读1m的连续数据需要10000000纳秒
- 从磁盘上都1m的连续数据需要30000000纳秒
小结
- 写比读昂贵40倍
- 全局共享的数据很昂贵。这是分布式系统的瓶颈。
- 系统设计时就要考虑写操作的可扩展性。
- 优化以减少写竞争。
- 让写操作尽可能地并行。