Может ли массивная запись и удаление файлов повлиять на производительность нашего сервера?
Мы используем систему, которая в целях кэширования в настоящее время записывает и удаляет около 1000 небольших файлов (10 КБ) каждый час. В ближайшем будущем это число возрастет до 10 000 - 20 000 файлов, которые пишутся и удаляются каждый час.
Для каждого записываемого файла добавляется и удаляется новая строка в нашей базе данных mysql, когда файл удаляется через час.
Мой вопрос:
- Может ли эта чрезмерная операция записи и удаления как-то повлиять на производительность нашего сервера? (Кстати, в настоящее время мы запускаем это на VPS и вскоре на выделенном сервере.)
- Может ли запись и удаление такого количества строк со временем замедлить работу нашей БД?
2 ответа
Это во многом зависит от операционной системы, файловой системы и конфигурации кэширования файловой системы. Также это зависит от того, хранится ли ваша база данных на том же диске, что и файлы, которые записаны / удалены.
Обычно операции, которые влияют на структуру файловой системы, такие как создание файлов и удаление файлов, требуют некоторого синхронного дискового ввода-вывода, поэтому операционная система не потеряет эти изменения после сбоя питания. Хотя некоторые операционные системы и файловые системы могут поддерживать более смягченную политику для этого. Например, файловая система UFS во FreeBSD имеет хорошую опцию "мягких обновлений", которая делает это. Вероятно, у etx3/Linus должна быть похожая функция.
Как только вы перейдете на выделенный сервер, я думаю, что было бы разумно подключить к нему несколько жестких дисков и убедиться, что база данных хранится на одном диске, а на другом диске выполняются массивные файловые операции. В этом случае производительность БД не должна быть затронута.
Вы должны сделать некоторые расчеты и оценить необходимую пропускную способность для хранилища. В вашем худшем сценарии 20000 файлов x 10K = 200 МБ в час, что является очень низким требованием. Удаление файла в современных файловых системах занимает очень мало времени.
На мой взгляд, вам не о чем беспокоиться, особенно если ваши приложения создают и удаляют файлы последовательно.
Учтите также, что современные операционные системы кэшируют части файловой системы в памяти, чтобы повысить производительность и уменьшить доступ к диску (это особенно верно для многократных удалений).
Ваша база данных будет расти, но движки оптимизированы для нее, нет необходимости заботиться об этом.
Единственным недостатком является то, что обработка большого количества маленьких файлов может привести к фрагментации диска, если ваша файловая система подвержена этому.
Для повышения производительности вам следует рассмотреть возможность использования отдельного физического хранилища для этих файлов (например, другого диска или дискового массива), чтобы вы могли использовать полную передачу полосы пропускания без каких-либо других помех.