Сортировка больших двоичных файлов

QOS обычно используется, чтобы уделить первостепенное значение определенным типам сетевых потоков. Разве Вы не можете изолировать и ограничить порт пользователя на сетевом коммутаторе? Или помещенный его в отдельный VLAN? Или ограничьте скорость передачи данных порта 100 Мбит/с?

Кроме этого я не знаю ни о каком ограничении пропускной способности NFS именем пользователя или MAC-адресом. Возможно, Ваш сервер NFS имеет опции гарантировать более распределенный способ служить запросам файла?

Размышление из поля: подвиньте интенсивные чтением файлы поближе к пользователю и выполните процесс backup/rsync для обратной записи обновленных данных к NAS?

Какие интенсивные чтением задания - они так или иначе?

6
задан 28 June 2012 в 06:11
3 ответа

Оказывается, вам повезло; существует программа unix в стиле GNU, которая делает именно это: bsort .

bsort - это сверхэффективная реализация поразрядной сортировки на месте с особым вниманием к шаблонам доступа к памяти при работе с файлами большего размера чем таран. Под эффективностью я имею в виду, что с середины 2014 года он смог превзойти http://sortbenchmark.org 2014 года по энергоэффективной сортировке 10 ^ 8 записей на оборудовании на оборудовании -рекорд был 889 Джоулей, ранний прототип этого мог отсортировать то же самое в 335 Джоулей на стандартном MacBook Pro. Для «маленьких» наборов данных, которые полностью помещаются в RAM (трехзначные мегабайты), это примерно в 3 раза быстрее, чем библиотека qsort libc.

2
ответ дан 3 December 2019 в 00:04

Одним из решений может быть преобразование входного файла в шестнадцатеричный, с каждой записью, закодированной в отдельной строке, сортировка и обратное преобразование в двоичный:

record_size=32
cat input \
    |xxd -cols $record_size -plain \
    |sort \
    |xxd -cols $record_size -plain -revert

Однако это медленно (xxd преобразует около 40 МБ / с на моей машине)

Итак, поскольку мне это было нужно, я написал binsort , который выполняет эту работу:

binsort --size 32 ./input ./output

С - размер 32 , он принимает 32-байтовые записи фиксированного размера, читает ./ input , записывает отсортированные записи в ./ output .

8
ответ дан 3 December 2019 в 00:04

Утилита сортировки Unix подходит для двоичных данных на основе расположения байтов в записях, если вы ссылаетесь на них относительно первой «записи». Например, -k1.28,1.32.

Сортировка в Unix менее гибка в отношении понятия конца строки. В зависимости от ваших данных вы можете сделать гораздо более простое редактирование потока, чем предлагает пользователь 68497 на основе xxd, и использовать строки с завершающим нулем. Тем не менее, это по-прежнему, вероятно, потребует большого объема копирования данных в память и не приблизится к скорости подхода на основе mmap.

Если вы все же используете сортировку unix, хотя в некоторой степени, будьте осторожны с локалью . sort предполагает, что вводимый текст является текстом, а языковой стандарт влияет на порядок сортировки.

5
ответ дан 3 December 2019 в 00:04

Теги

Похожие вопросы