Проблемы с производительностью при записи в большие файлы? - PullRequest
15 голосов
/ 12 сентября 2010

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

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

Могут быть проблемы с чтением или поиском в файле, но сейчас мне больше интересно узнать, может ли быть какое-либо влияние на запись. Нужна консультация специалиста.

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

Ответы [ 2 ]

11 голосов
/ 18 сентября 2010

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

Существуют особые случаи (например, попытка сбоя в блоке с тройным непрямым блоком или начальное открытие, требующее считывания всей информации отображения), которые могут добавить дополнительные операции ввода-вывода.но устойчивое состояние должно быть таким же.

Я бы больше беспокоился о возможности управления огромными файлами: медленное резервное копирование, медленное копирование, медленное просмотр и т. д.

2 голосов
/ 12 сентября 2010

Я не эксперт, но все равно постараюсь ответить.

Для записи на диск больших файлов может потребоваться больше времени, и фактически это не проблема программирования. Это проблема файловой системы. Возможно, существуют файловые системы, в которых таких проблем нет, но в Windows большие файлы нельзя записать одним куском, поэтому для их фрагментации потребуется время (по той простой причине, что головка должна будет перейти в какой-то другой цилиндр). Предполагая, что речь идет о «классических» жестких дисках ...

Если вам нужен совет, я бы пошел записывать файлы меньшего размера и вращать их либо ежедневно, либо когда они достигают некоторого размера (или того и другого на самом деле). Это довольно распространенный подход, который я видел в продуктах корпоративного уровня.

...