Я получил несколько больших файлов с помощью команды

mysql> select * into outfile ...

например, dump_news.sql, dump_weibo.sql, dump_report.sql ...

Общий размер около 7.6G, я использую команду

tar -zcvf dump.tar.gz dump_*

в Linux, чтобы сжать вышеуказанные файлы, однако это занимает около 4 часов. Это долго. Я протестировал инструмент bzip2, он занимает больше времени, но размер сжатого файла меньше. Поэтому я хочу знать, есть ли инструмент для меня, чтобы закончить сжатие быстрее.

4 ответа4

2

Несколько месяцев назад мне пришлось сжать весь домашний каталог, поэтому я создал скрипт bash, который запускал tar в нескольких процессах и отслеживал количество процессов, так что всегда было 6 процессов одновременно (у меня 4 ядра, поэтому 6 потоков было так, что он мог сжать в ожидании iowait, так как я положил его через USB на мой жесткий диск).

Мой скрипт здесь: https://gist.github.com/3989700

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

Вы также можете изменить количество выполняемых потоков в соответствии с вашим собственным процессором.

1

4 часа, чтобы сжать ~ 8G слишком много. Изучите предложение @Piskvor.

Кроме того, вместо сохранения выходных данных sql в файл и сжатия, можно запросить и сжать через канал.

mysql -e "query" other_options | gzip > OUT_FILE

Также, если вы заинтересованы, проверьте gzip vs bzip vs lzma

1

Прежде всего, вы можете принять немного меньшее сжатие для гораздо более высокой скорости. Вы можете передать вывод tar в gzip и задать для gzip параметр уровня сжатия от -1 до -3 и посмотреть, как это работает для вас.

Во-вторых, как отметил @Piskvor, вы можете использовать несколько процессоров и ядер с Pigz, которые можно использовать в качестве замены gzip.

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

0

lzop быстрее с точки зрения процессора, чем gzip (но получает меньшее сжатие), хотя вы не сможете получить слишком много быстрее из-за ограничений дискового ввода-вывода, если у вас нет твердотельного диска или RAID-массива.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .