鉴于固态硬盘(SSD)价格正在下降并且很快将变得更加普遍,因为它们的访问速率明显高于旋转磁介质,标准算法将通过使用SSD用于本地存储?例如,SSD的高随机读取速度使得类似于基于磁盘的散列表具有大型散列表的可行性;容易获得4GB的磁盘空间,这使得散列到32位整数的整个范围都是可行的(更多的是查找而不是人口,但这仍然需要很长时间);虽然由于访问速度的原因,这个哈希表的大小将无法与旋转媒体一起使用,但它不应该是SSD的问题。
是否有任何其他领域即将过渡到SSD将提供算法性能的潜在收益?我宁愿看到关于一件事情如何发挥而不是舆论的推理;我不希望这有争议。
答案 0 :(得分:15)
您的哈希表示例确实是将受益的关键数据库结构。可以直接探测SSD,而不必将整个4GB或更多文件加载到内存中以探测值。固态硬盘的速度仍然比内存慢了几个数量级,但是在磁盘上有一个50GB的哈希表是合理的,但除非你为大铁支付大笔钱,否则不在内存中。
一个例子是象棋位置数据库。我有超过50GB的散列位置。有一些复杂的代码试图在散列中将相关位置分组到彼此附近,因此我可以一次在10MB的表中进行分页,并希望将其中的一些用于多个类似的位置查询。为了提高效率,需要大量的代码和复杂性。
替换为SSD,我能够放弃集群的所有复杂性,只使用非常愚蠢的随机哈希。我也提高了性能,因为我只从磁盘中获取所需的数据,而不是大的10MB块。延迟确实更大,但净加速是显着的...超清代码(20行,而不是800+),可能更好。
答案 1 :(得分:3)
SSD的随机访问速度明显加快。顺序访问磁盘它们只是主流旋转驱动器的两倍。许多SSD在许多情况下的性能较差,导致它们表现更差,如here所述。
虽然SSD确实大大推动了针头,但它们仍然比CPU操作和物理内存慢得多。对于4GB哈希表示例,您可以通过SSD维持250+ MB / s的速度来访问随机哈希表桶。对于旋转驱动器,您很幸运能够打破单位数MB / s。如果你可以将这个4 GB的哈希表保存在内存中,你可以每秒读取一亿GB的速度 - 比一个非常快的SSD快得多。
参考文章列出了MS在Windows上运行时对Windows 7所做的一些更改,这些更改可以让您了解可以考虑进行的更改类型。首先,禁用用于从磁盘预取数据的SuperFetch - 它旨在解决磁盘缓慢的随机访问时间,这些时间可以通过SSD减轻。碎片整理被禁用,因为分散在磁盘上的文件不会影响SSD的性能。
答案 2 :(得分:2)
我可以看到某些数据库系统从中获益。 MySQL,例如使用MyISAM存储引擎(其中数据记录基本上是美化的CSV)。但是,我认为非常大的哈希表是最好的选择。
答案 3 :(得分:1)
随机读取的SSD速度要快得多,顺序读取的速度要快得多,写入速度要慢得多(随机或不随机)。
因此,基于磁盘的哈希表正好不对SSD有用,因为现在需要花费大量时间来更新它,但搜索磁盘变得非常便宜(与普通硬盘相比)。
答案 4 :(得分:0)
不要自欺欺人。 SSD仍然比系统内存慢得多。选择在硬盘上使用系统内存的任何算法仍然会快得多,其他条件相同。