запись одного большого файла или нескольких маленьких файлов

#c #benchmarking #subdirectory #filewriter

#c #сравнительный анализ #подкаталог #filewriter

Вопрос:

Мне интересно, что лучше с точки зрения производительности: записать в один большой текстовый файл (что-то около 10 ГБ или более) или использовать систему вложенных папок, которая будет иметь 3 уровня с 256 папками в каждом, последним уровнем будет текстовый файл. Пример:

 1
 1
 2
 3
  1
  2
  3
  4
 4
2
3
4
 

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

У меня core i7, 6 ГБ оперативной памяти DDR3 и скорость записи на диск 60 МБ / с под ext4.

Комментарии:

1. Профилируйте его и узнайте?

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

3. Это приложение, которое я пишу на языке Си

4. @ruslik пишет. Я буду искать его, имея таблицу адресов в начале, которая имитирует структуру папок.

5. @FredericoSchardong: И почему это должен быть текст? Какие данные у вас есть?

Ответ №1:

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

Ответ №2:

Чтобы принять решение, вам нужно знать ответы на многие вопросы, в том числе:

  • Как вы собираетесь определить, к какому из множества файлов обращаться для получения нужной вам информации?
  • Когда вам нужно добавить, будет ли это сделано в логический последний файл или в конец любого файла, в котором должна была быть найдена информация?
  • Как вы узнаете, где искать в любом заданном файле (большом или маленьком), где находится информация?
  • Для ваших 256 файлов 3 (16 миллионов или около того, если вы используете их все) потребуется достаточное количество места в каталоге.

На самом деле вы ничего не упоминаете о чтении файла, что странно.

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

Итак, вы не включили в вопрос достаточно информации, чтобы кто-либо мог дать какой-либо окончательный ответ. Если в добавленных вами комментариях достаточно дополнительной информации, то вам следовало поместить эти комментарии в вопрос (отредактируйте вопрос; добавьте материал для комментариев).