这是一个软件devise问题
我曾经为了速度而遵循以下规则
cache memory > memory > disk > network
每一步是前一步的5-10倍(例如,高速缓冲存储器比主存储器快10倍)。
现在看来,千兆以太网的延迟比本地磁盘less。 因此,从大型远程内存数据库中读取的操作可能比本地磁盘读取要快。 对于像我这样的老朋友,这种感觉就像是异端邪说。 (我只是花了一些时间在磁盘上build立一个本地caching,以避免必须做networking往返 – 因此我的问题)
有人在这方面有经验/数字/build议吗?
是的,我知道,唯一真正的方法是build立和测量,但我想知道一般规则。
编辑 :
这是来自顶级答案的有趣数据:
往返同一数据中心500,000 ns
磁盘寻道10,000,000 ns
这对我来说是一个震撼。 我的心理模型是networking往返本身就很慢。 而不是 – 比磁盘“往返”快10倍。
Jeff attwood在http://blog.codinghorror.com/the-infinite-space-between-words/上发表了这个v好博客。
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
这是从他的介绍标题devise,经验教训和build设大型分布式系统build议 ,你可以在这里得到它:
这次演讲是在2009年大规模分布式系统和中间件(LADIS)上发表的 。
据说 gcc -O4将你的代码通过电子邮件发送给Jeff Dean进行重写。
networking与磁盘之间有很多变数,但一般而言,磁盘速度更快。
SATA 3.0和SAS总线是6 Gbps,而networking1Gbps减去协议开销。 使用RAID-10 15k SAS,networking似乎会变慢。 此外,你有磁盘caching,也可能固态硬盘,这取决于情况,也可以提高速度。 随机数据访问和顺序数据访问起到了一个重要的作用,以及数据传输的块大小。 这一切都取决于正在使用的访问磁盘的应用程序。
现在,我甚至没有提到这个事实:无论你通过networking传输的是或者来自磁盘,所以…….再次,磁盘更快。
那么,这取决于networking资源是否有你要求的数据(在内存或类似的),或者它只是反过来从磁盘读取数据。
无论如何,在某些情况下吞吐量可能会更高,但是我认为延迟会更高。
IMX磁盘仍然更快。 networking的理论传输速率很高,但在实践中你并不接近。
大约两年前,我的笔记本电脑出现了硬盘故障,而且DMA出了问题。 这使得硬盘驱动器显着变慢,特别是比networking慢。 但是,当我切换到另一台电脑时,我回到了原来的硬盘状态比互联网更快。
对于千兆networking,我的经验是,在正确的服务器上,您可以在吞吐量和延迟方面超越本地性能。 请参阅networkingtesting:我们获得千兆性能?
对于所有实际的目的,我build议将networking和本地存储视为等同的,只使用内存caching。
所提到的标准警告是正确的,因为没有一般规则。 实际上大多数情况下,人们应该使用configuration良好的服务器,并使用度量来评估数据传输的最佳方法。
如果您使用低端硬盘的低端机器,那么使用千兆networking连接到具有快速存储arrays的服务器几乎肯定会更快。
同样,如果您正在使用两台接近相同硬件的机器,则延迟和networking开销会使本地存储更快; 这真的是常识。
这取决于。 如果您的I / O主要是随机访问,那么相比于可用的networking带宽,其平坦吞吐量可能不是那么好。 但是,大多数networkingstream量最终由涉及I / O的进程生成。 如果生成networking通信的任何进程的工作集适合caching,那么它将不受磁盘带宽的限制。 如果它撞击caching,则磁盘将成为瓶颈。
我在数据仓库系统上工作,规范的DW查询是一个表扫描。 如果您的查询命中事实表(或分区)中的行数超过百分之几,则使用顺序I / O的表或分区扫描将比使用索引查找和查找的随机访问查询计划更有效。
除非经过适当调整,否则networking存储(即SAN)在stream式传输工作负载方面往往不能很好地运行。 如果将SAN用于通用的整合环境,那么对于像数据仓库这样的stream式加载,几乎可以肯定地将其调整到非最优状态。 我看到一个供应商的白皮书表明,你需要大约3倍的磁盘数量来获得相同的SAN吞吐量,而不是针对stream式I / O进行调整。
我的经验与此相符。 事实上,我从来没有将数据仓库部署到整合环境,我无法在桌面PC上快速运行相同的ETLstream程。 我也曾经从一家大型SAN设备厂商的销售代表那里得到logging,他们很多客户使用DW系统的直接连接存储,因为SAN速度不够快。
对于随机访问工作负载,networking存储每IOPS至less比直接附加存储昂贵一个数量级,并且对于stream式传输而言更接近两个数量级。
我有这样的经验是,当你在1Gbit连接上,而你尝试下载一个文件时,你的硬盘通常是瓶颈。 你必须记住的一点是你必须首先build立一个连接,这也需要时间。 因此,发送大块数据networking实际上可能比磁盘快。
是的,一般来说,networking现在比硬盘更快,但是这可能会随着时间的推移而变化。
我思故我在
当一个应用程序正在运行,这意味着主机正在工作,而在networking上工作需要一个共同的协议,检查对等可用性,通道安全性…如果同行使用不同的平台,很难实现你可以做的单机。
我更愿意从权衡的angular度来看待这个问题,而不是谁是最强的。
你必须描述一个确切的用例来进行比较。 硬盘有时间+传输速率和caching。 networking具有延迟,传输速率和协议开销
一般来说,我认为你的原始缓冲存储器>内存>磁盘>networking仍然是真实的
磁盘通过SCSI,SAS或IDE总线与CPU连接。 这是运行特定协议的内部networking – SCSI或ATAPI。 以太网被devise用于更长距离的工作,并且可以比SAS / SCSI / IDE慢得多。 那么哪一个更快,取决于你比较哪种技术。 如果您将20年的笔记本电脑硬盘与10Gbps的RAM存储器进行比较,则获胜者将始终是networking连接。 而当你购买存储时,你必须将其与价格和可pipe理性进行比较。
那么,目前有100GBpsnetworking速度的Light Peak正在接近RAM速度。 当然,networking只能像发送者生成数据一样快速发送数据,也就是说,如果发送者正在从硬盘读取数据,那么接收者将只以与读取磁盘相同的速度获取数据,即使一个超快的networking。
有一点要记住的是它依赖于networking。 比方说,你要对网站的performance负责。 这个网站当然是通过本地networking连接到数据库服务器,并通过互联网连接到网上冲浪者,这也是一种networking。
在许多情况下,Web服务器和数据库服务器之间可以通过静态IP和交叉电缆或automdxbuild立专用链路,以保持延迟,并为stream量提供专用链路,因为您希望它非常快速。 数据库服务器执行各种工作来尽可能多地在内存中保留数据库,并且在许多情况下通常会成功地为整个内容加上一些索引。 对这个数据库的查询将会比查询磁盘更快或者更快。
另一方面,某些web技术(asp.net webforms viewstate,我在看你)喜欢把大量的信息作为一个caching(各种)推送到客户端Web浏览器和从客户端Web浏览器。 如果这是一个本地局域网连接(在asp.net webform的防守中,这在很多时候都是如此),但并不是那么糟糕,但是在公共互联网上,这绝对会导致性能下降,因此,而不是数据库或本地磁盘。
我个人认为有几个因素需要考虑。 例如,你在本地访问的内存或磁盘速度与通过networking访问的速度有多快? 如果远程数据的速度非常快,并且比端到端安装的千兆位networking快,那么对于大型stream式文件,远程数据传输速度可能会更快。
但是,如果你随机访问小的数据单元,并且networking不是完美无瑕的,或者有很多跳跃,而且不仅仅是访问它,我敢打赌,本地caching的速度甚至比在机械式磁盘驱动器上快100倍% 的时间。 但是,您提出一个有趣的观点,如果networking速度持续增长,需要多长时间才能存储任何东西。