#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"
) . Если вы обновляете (а также добавляете) информацию, то у вас возникают проблемы с блокировкой (одновременный доступ; кто выигрывает).
Итак, вы не включили в вопрос достаточно информации, чтобы кто-либо мог дать какой-либо окончательный ответ. Если в добавленных вами комментариях достаточно дополнительной информации, то вам следовало поместить эти комментарии в вопрос (отредактируйте вопрос; добавьте материал для комментариев).