Безопасно ли делать много маленьких записей в секунду на SSD?

У меня есть приложение, которое получает несколько сотен строк в секунду, около пятидесяти байт, по сети. Я хочу кэшировать их на SSD для дальнейшей обработки. Безопасно ли для SSD, если я выполняю несколько сотен ~50-байтовых операций записи файлов в секунду? Я подозреваю, что ОС может объединить эти записи, но я не знаю. Я смутно понимаю, что твердотельные накопители состоят из ячеек, которые должны обновляться по принципу "все или ничего", а также что каждая ячейка может выдерживать только столько операций записи (я думаю, сотни или тысячи для обычных накопителей). Помогает ли мое приложение с малыми объемами записи использовать SSD на пути к уничтожению? Буду ли я безопаснее, если кэширую в память и записываю на диск порциями каждую минуту / час? Очевидно, что это сложнее (веб-сервис к кешу памяти за последнюю минуту / час, диск для старых данных), но я также предпочитаю не разрушать слишком много оборудования.

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

3 ответа

Решение

Сами SSD пишут комбинированно. Они кэшируют записи во встроенном кэше, пока не получат большой блок, а затем записывают блок параллельно многим матрицам NAND. Именно так SSD достигают такой высокой скорости записи, несмотря на то, что скорость записи на самом NAND довольно низкая. Пока записи более или менее последовательны, размер не очень важен (пока количество запросов на запись не насыщает способность контроллера обрабатывать).

В зависимости от скорости, с которой вам нужно писать строки, может иметь смысл собрать их в блоки, по крайней мере, такие же большие, как размер страницы NAND в SSD. В настоящее время размер страницы обычно составляет 8 КБ.

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

Лично я запустил проект, в котором два демона записывали пакеты данных в MySQL Innodb. Размер пакета был около 100 байт. Один демон записывал один пакет каждые 15 секунд, другой - за 1,5 секунды. Каждый пакет был отдельным коммитом, и я получил ОГРОМНОЕ, невероятно огромное влияние на мой SSD.

После запуска проекта счетчик "среднее стирание блоков" начал увеличиваться на 1 каждый день. Как я понимаю, это означает, что весь SSD (который на 70% пуст) переписывался каждый день для поддержки двух таблиц Innodb по 60 МБ каждая. Я описал эту ситуацию чуть более (ненужными) подробностями в моем блоге.

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

Тем не менее, я, вероятно, буду кешировать память до тех пор, пока вы не достигнете определенного порогового размера, а затем выгрузить все на SSD. Но это было бы то, что я бы сделал по соображениям производительности...

Если подумать, какова теоретическая разница между записью 50 байтов 500 раз против 500 байтов 50 раз? Одинаковое количество байтов все еще в конечном итоге записывается на диск, он просто разбивается по-разному. В любом случае вы все равно будете записывать в одно и то же число ячеек на вашем диске, и, скорее всего, вопрос заключается в том, сможет ли контроллер диска справиться со спросом.

Другие вопросы по тегам