pm1*_*100 146 performance io
这是一个软件设计问题
我曾经按照以下速度规则工作
cache memory > memory > disk > network
Run Code Online (Sandbox Code Playgroud)
每一步都是前一步的 5-10 倍(例如,高速缓存比主存储器快 10 倍)。
现在,似乎千兆以太网的延迟比本地磁盘少。因此,也许读取大型远程内存数据库的操作比本地磁盘读取快。对于像我这样的老前辈来说,这感觉就像异端邪说。(我只是花了一些时间在磁盘上构建本地缓存以避免必须进行网络往返 - 因此我的问题)
有人在这方面有任何经验/数字/建议吗?
是的,我知道唯一真正的方法是构建和测量,但我想知道一般规则。
编辑:
这是来自顶级答案的有趣数据:
同一数据中心内的往返 500,000 ns
磁盘寻道 10,000,000 ns
这对我来说是一个冲击;我的心智模型是网络往返本质上是缓慢的。它不是 - 它比磁盘“往返”快 10 倍。
Jeff attwood 在http://blog.codinghorror.com/the-infinite-space-between-words/上发布了这个很好的博客
Dav*_*tas 155
以下是您可能正在寻找的一些数字,正如谷歌研究员杰夫迪恩所引用的那样:
每个人都应该知道的数字
Run Code Online (Sandbox Code Playgroud)L1 cache reference 0.5 ns Branch mispredict 5 ns L2 cache reference 7 ns Mutex lock/unlock 100 ns (25) Main memory reference 100 ns Compress 1K bytes with Zippy 10,000 ns (3,000) Send 2K bytes over 1 Gbps network 20,000 ns Read 1 MB sequentially from memory 250,000 ns Round trip within same datacenter 500,000 ns Disk seek 10,000,000 ns Read 1 MB sequentially from network 10,000,000 ns Read 1 MB sequentially from disk 30,000,000 ns (20,000,000) Send packet CA->Netherlands->CA 150,000,000 ns
它来自他的演讲,标题为“构建大型分布式系统的设计、经验教训和建议”,您可以在此处获取:
该演讲是在2009 年大规模分布式系统和中间件 (LADIS) 上进行的。
据说gcc -O4 会将您的代码通过电子邮件发送给 Jeff Dean 进行重写。
Jak*_*son 22
网络与磁盘之间存在很多变数,但总的来说,磁盘更快。
SATA 3.0 和 SAS 总线为 6 Gbps,而网络为 1Gbps 减去协议开销。使用 RAID-10 15k SAS,网络看起来会很慢。此外,您还拥有磁盘缓存以及固态硬盘的可能性,这取决于具体情况,也可以提高速度。随机与顺序数据访问以及传输数据的块大小都有影响。这一切都取决于用于访问磁盘的应用程序。
现在,我什至还没有提到这样一个事实,即无论您通过网络传输的任何内容都将到达或来自磁盘……所以……再说一次,磁盘速度更快。
小智 11
嗯,这取决于网络资源是否具有您请求的数据随时可用(在内存中或类似的地方),或者它是否会反过来从磁盘读取它。
无论如何,在某些情况下吞吐量可能更高,但我相信延迟会更高。