这是一个软件设计问题
我曾经研究过以下速度规则
cache memory > memory > disk > network
每一步都是前一步的 5-10 倍(例如,高速缓存比主存储器快 10 倍)。
现在,千兆以太网的延迟似乎比本地磁盘要小。因此,从大型远程内存数据库中读取数据的操作可能比本地磁盘读取数据要快。对于像我这样的老手来说,这感觉像是异端邪说。(我刚刚花了一些时间在磁盘上构建本地缓存,以避免进行网络往返 - 因此我提出了这个问题)
有人在这方面有经验/数据/建议吗?
是的,我知道唯一真正找出答案的方法就是构建和测量,但我想知道一般规则。
编辑:
这是来自最佳答案的有趣数据:
同一数据中心内往返 500,000 纳秒
磁盘寻道 10,000,000 ns
这对我来说是个震惊;我的思维模式是网络往返本质上很慢。但事实并非如此 - 它比磁盘“往返”快 10 倍。
Jeff attwood 发表了一篇关于该主题的非常好的博客http://blog.codinghorror.com/the-infinite-space-between-words/
答案1
以下是您可能正在寻找的一些数字,由 Google 研究员 Jeff Dean 引用:
每个人都应该知道的数字
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
这是他的演讲,标题为构建大型分布式系统的设计、经验教训和建议你可以在这里获取它:
其他信息
据说gcc -O4 将您的代码通过电子邮件发送给 Jeff Dean 进行重写。
答案2
当谈到网络与磁盘时,存在很多变量,但总的来说,磁盘速度更快。
SATA 3.0 和 SAS 总线为 6 Gbps,而网络为 1 Gbps(减去协议开销)。使用 RAID-10 15k SAS,网络会显得非常慢。此外,您还有磁盘缓存,还有固态硬盘的可能性,根据情况,这也可以提高速度。随机与顺序数据访问是一个因素,以及传输数据的块大小。这一切都取决于用于访问磁盘的应用程序。
现在,我甚至还没有触及这样一个事实,即无论你通过网络传输什么,它都会到达或来自磁盘......所以......再说一次,磁盘更快。
答案3
嗯,这取决于网络资源是否有您请求的数据(在内存或类似的地方)或者是否只是从磁盘读取。
无论如何,在某些情况下吞吐量可能会更高,但我相信延迟会更高。
答案4
IMX 磁盘仍然更快。网络的理论传输速率很高,但实际上你无法接近这个速率。
大约两年前,我的笔记本电脑硬盘出了问题,DMA 出问题了。这导致硬盘速度明显变慢,尤其是比网络速度慢。但当我换到另一台电脑时,硬盘速度又恢复到了原来的状态,比互联网速度还快。