написать один большой файл или несколько маленьких файлов - PullRequest
2 голосов
/ 21 октября 2011

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

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

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

Я нахожусь на ядре i7, 6 ГБ памяти DDR3 и скорости записи 60 МБ / с под ext4.

Ответы [ 2 ]

2 голосов
/ 21 октября 2011

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

0 голосов
/ 21 октября 2011

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

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

Вы на самом деле ничего не упоминаете о чтении файла - что странно.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...