Разница между последовательной записью и случайной записью

StackOverflow https://stackoverflow.com/questions/2100584

Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top