Разница между последовательной записью и случайной записью - PullRequest
32 голосов
/ 20 января 2010

В чем разница между последовательной и случайной записью в случае: - 1) Дисковые системы 2) Системы на основе SSD [Flash Device]

Когда приложение записывает что-то и информация / данные должны быть изменены на диске, тогда как мы узнаем, является ли это последовательной или случайной записью. До этого момента запись не может быть определена как «последовательная» или "random". Запись просто буферизуется и затем применяется к диску, когда мы очистим буфер.

Пожалуйста, поправьте меня, если я ошибаюсь.

1 Ответ

79 голосов
/ 18 марта 2010

Когда люди говорят о последовательных против случайных записях в файл, они обычно проводят различие между записью без промежуточных поисков («последовательный») и шаблоном поиск-запись-поиск-запись-поиск-запись и т. д. («случайно»).

Различие очень важно в традиционных дисковых системах, где каждый поиск диска занимает около 10 мс. Последовательная запись данных на этот же диск занимает около 30 мс на МБ. Таким образом, если вы последовательно записываете 100 МБ данных на диск, это займет около 3 секунд. Но если вы делаете 100 случайных записей по 1 МБ каждая, это займет в общей сложности 4 секунды (3 секунды для фактической записи и 10 мс * 100 == 1 секунда для всех запросов).

Поскольку каждая случайная запись уменьшается, вы платите все больше и больше штрафа за поиск диска. В крайнем случае, когда вы выполняете 100 миллионов случайных однобайтовых записей, вы все равно будете получать чистые 3 секунды для всех реальных записей, но теперь у вас будет 11,57 дней попыток сделать! Ясно, что степень, в которой ваши записи являются последовательными и случайными, действительно может повлиять на время, необходимое для выполнения вашей задачи.

Ситуация немного отличается, когда дело доходит до вспышки. При использовании флэш-памяти у вас нет головки физического диска, которую вы должны перемещать. (Вот откуда берется стоимость поиска 10 мс для традиционного диска). Однако флеш-устройства, как правило, имеют большие размеры страниц (наименьший «типичный» размер страницы составляет около 512 байт в соответствии с wikipedia , и размеры страницы 4K также являются общими). Таким образом, если вы пишете небольшое количество байтов, у флэш-памяти все еще есть накладные расходы: вы должны прочитать всю страницу, изменить байты, которые вы пишете, а затем записать обратно всю страницу. Я не знаю характерные цифры для вспышки на макушке. Но практическое правило заключается в том, что на флэш-памяти, если каждая из ваших записей обычно сопоставима по размеру с размером страницы устройства, вы не увидите большой разницы в производительности между случайной и последовательной записью. Если каждая из ваших записей невелика по сравнению с размером страницы устройства, то при выполнении случайной записи вы увидите некоторые издержки.

Теперь для всего вышесказанного верно, что на уровне приложений многое скрыто от вас. В ядре, контроллере диска / флэш-памяти и т. Д. Есть слои, которые могут, например, вставлять неочевидные поиски в середине вашей «последовательной» записи. Но в большинстве случаев запись, которая «смотрит» последовательно на прикладном уровне (без поиска, много непрерывного ввода-вывода) будет иметь производительность последовательной записи, тогда как запись, которая «смотрит» случайным образом на уровне приложения, будет иметь (как правило, хуже) производительность произвольной записи.

...