LINUX.ORG.RU

История изменений

Исправление quest, (текущая версия) :

Чтобы писать нужно знать что писать, откуда это взять и куда положить. Эта информация доступна только после того как мы знаем сколько строк есть, какие у них смещения и длины. Поэтому на первом этапе последовательно читается файл открытый через mmap. Полученная информация рандомизируется. Запоминается какое было смещение, какое должно быть.

Далее есть два варианта:

1) читать последовательно с mmap, писать с seek.

2) читать с seek, писать последовательно.

первый вариант явно быстрее, поэтому делаем второй проход по входному файлу, читаем последовательно с mmap, просто тупо просматриваем список строк узнаем новое смещение делаем туда seek в выходном файле и записываем туда строку. тупо повторяем пока не кончаться строки. Все.

В памяти никаких буферов не выделяем, сами строки не храним, хреним только старое смещение, новое смещение и длину.

Исправление quest, :

Чтобы писать нужно знать что писать, откуда это взять и куда положить. Эта информация доступна только после того как мы знаем сколько строк есть, какие у них смещения и длины. Поэтому на первом этапе последовательно читается файл открытый через mmap. Полученная информация рандомизируется. Запоминается какое было смещение, какое должно быть.

Далее есть два варианта:

1) читать последовательно с mmap, писать с seek.

2) читать с seek, писать последовательно.

первый вариант явно быстрее, поэтому делаем второй проход по входному файлу, читаем последовательно с mmap, просто тупо просматриваем список строк узнаем новое смещение делаем туда seek в выходном файле и записываем туда строку. тупо повторяем пока не кончаться строки. Все.

Исправление quest, :

Чтобы писать нужно знать что писать, откуда это взять и куда положить. Эта информация доступна только после того как мы знаем сколько строк есть, какие у них смещения и длины. Поэтому на первом этапе последовательно читается файл открытый через mmap. Полученная информация рандомизируется. Запоминается какое было смещение, какое должно быть.

Далее есть два варианта: 1) читать последовательно с mmap, писать с seek. 2) читать с seek, писать последовательно.

первый вариант явно быстрее, поэтому делаем второй проход по входному файлу, читаем последовательно с mmap, просто тупо просматриваем список строк узнаем новое смещение делаем туда seek в выходном файле и записываем туда строку. тупо повторяем пока не кончаться строки. Все.

Исходная версия quest, :

Еще раз:

Чтобы писать нужно знать что писать, откуда это взять и куда положить. Эта информация доступна только после того как мы знаем сколько строк есть, какие у них смещения и длины. Поэтому на первом этапе последовательно читается файл открытый через mmap. Полученная информация рандомизируется. Запоминается какое было смещение, какое должно быть.

Далее есть два варианта: 1) читать последовательно с mmap, писать с seek. 2) читать с seek, писать последовательно.

первый вариант явно быстрее, поэтому делаем второй проход по входному файлу, читаем последовательно с mmap, просто тупо просматриваем список строк узнаем новое смещение делаем туда seek в выходном файле и записываем туда строку. тупо повторяем пока не кончаться строки. Все.