Алгоритмы оптимизации с быстрым дисковым хранилищем (SSDs)?

учитывая, что твердотельные диски (SSDs) снижаются в цене и вскоре станут более распространенными в качестве системных дисков, и учитывая, что их скорость доступа значительно выше, чем вращающиеся магнитные носители, какие стандартные алгоритмы выиграют в производительности от использования SSDs для локального хранения? Например, высокая скорость случайного чтения SSDs делает что-то вроде дисковой хэш-таблицы жизнеспособной для больших хэш-таблиц; 4 ГБ дискового пространства легко доступно, что делает хэширование весь диапазон 32-разрядного целого числа жизнеспособен (больше для поиска, чем для заполнения, хотя это все равно займет много времени); хотя этот размер хэш-таблицы будет запрещен для работы с вращающимися носителями из-за скорости доступа, это не должно быть такой же проблемой с SSDs.

существуют ли другие области, в которых предстоящий переход на SSD обеспечит потенциальный выигрыш в алгоритмической производительности? Я бы предпочел видеть рассуждения о том, как одна вещь будет работать, а не мнение; я не хочу, чтобы это стало спорным.

5 ответов


ваш пример хеш-таблицы-это действительно ключевая структура базы данных, которая принесет пользу. Вместо того, чтобы загружать весь файл 4GB или более в память для поиска значений, SSD можно зондировать напрямую. SSD все еще медленнее, чем RAM, на порядки, но вполне разумно иметь хэш-таблицу 50GB на диске, но не в ОЗУ, если вы не платите большие деньги за большое железо.

пример базы данных шахматных позиций. У меня более 50 ГБ хэшированных позиций. Там сложный код чтобы попытаться сгруппировать связанные позиции рядом друг с другом в хэше, поэтому я могу страница в 10 МБ таблицы за раз и надеюсь повторно использовать некоторые из них для нескольких аналогичных запросов позиции. Есть тонны кода и сложности, чтобы сделать это эффективным.

замененный SSD, я смог отбросить всю сложность кластеризации и просто использовать действительно тупые рандомизированные хэши. Я также получил повышение производительности, так как я получаю только нужные мне данные с диска, а не большие куски 10MB. Время ожидания это действительно больше, но чистое ускорение значительно.. и супер-чистый код (20 строк, а не 800+), возможно, еще лучше.


SSDs только значительно быстрее для случайного доступа. Последовательный доступ к диску они только дважды как performant как приводы основного направления вращательные. Многие SSD имеют более низкую производительность во многих сценариях, заставляя их работать хуже, как описано здесь.

хотя SSDs значительно перемещают иглу, они все еще намного медленнее, чем операции процессора и физической памяти. Для вашего примера хэш-таблицы 4GB вы можете поддерживать 250 + MB / s от SSD для доступ к случайным ведрам хэш-таблицы. Для вращательного привода Вам ПОВЕЗЕТ сломать одну цифру MB / s. Если вы можете сохранить эту хэш-таблицу 4 ГБ в памяти, вы можете получить к ней доступ на порядок гигабайт в секунду - намного быстрее, чем даже очень быстрый SSD.

в указанной статье перечислены несколько изменений MS, сделанных для Windows 7 при работе на SSD, что может дать вам представление о том, какие изменения вы могли бы рассмотреть. Во-первых, SuperFetch для предварительной выборки данных с диска отключено-он предназначен, чтобы обойти медленное время произвольного доступа для диска, которые облегчаются SSDs. Дефрагментация отключена, потому что файлы разбросаны по всему диску не производительности для SSD.


Ipso facto, любой алгоритм, который вы можете придумать, требует много случайных дисковых ввода-вывода (random-ключевое слово, которое помогает бросить принцип локальности птицам, тем самым устраняя полезность большого количества кэширования, которое происходит).

Я мог видеть, что некоторые системы баз данных выигрывают от этого. MySQL, например, используя механизм хранения MyISAM (где записи данных в основном прославляются CSV). Однако, я думаю, что очень большие хэш-таблицы будут вашим лучшим ставьте на хорошие примеры.


SSD намного быстрее для случайных чтений, немного для последовательных чтений и правильно медленнее для записи (случайной или нет).

Так diskbased хеш-таблица-это правильно не полезно с SSD, так как теперь требуется значительное время для его обновления, но поиск диска становится (по сравнению с обычным hdd) очень дешевым.


Не обманывай себя. SSDs по-прежнему намного медленнее, чем системная память. Любой алгоритм, который решит использовать системную память на жестком диске, все равно будет намного быстрее, при прочих равных условиях.