Я внедряю систему торрент-загрузки и архивирования. Я хочу скачать торрент-файл (содержащий несколько небольших файлов), а затем заархивировать его. Мой диск работает плохо. поэтому мне нужен эффективный способ архивирования файлов.
У меня есть несколько вариантов:
1. Загрузите файлы на обычный диск / файловую систему, а затем TAR их, используя обычный unix tar
команда.
2. Создайте пустой архив TAR, а затем смонтируйте его в режиме записи, используя archivemount
а затем начните скачивать торрент по смонтированному пути.
3. Аналогично варианту 2 но используя ZIP-файл вместо tar.
4. Поскольку я хочу доставлять файлы через веб-браузер: внедрите программное обеспечение / скрипт для TAR папки на лету. (для этого я написал сценарий на Python (uWsgi / Nginx) несколько лет назад. Но поскольку tar требует контрольную сумму для каждого файла. Производительность была довольно низкой)
5. Найдите торрент-клиент, который может писать прямо в файл TAR / Zip. (Маловероятно)
Какой путь мне следует рассмотреть?
Спасибо.
Лучшее для производительности на самом деле все равно будет 4, если диск действительно является вашим истинным узким местом. Это избавляет вас от необходимости тратить драгоценные IOPS на копирование файлов из одного места в другое.
Кроме того, вариант 4 на самом деле является единственным вариантом, который позволит клиенту мгновенно загрузить торрент, как только ваш сервер завершит загрузку, а это означает, что клиент действительно может быстрее получить доступ к своим данным. Кроме того, таким образом у вас есть возможность легко разрешить пользователю загружать отдельные файлы (очень просто, поскольку они просто находятся в вашей файловой системе).
Я хотел бы выяснить, почему tar дает такую низкую производительность. Я действительно сомневаюсь, что ваша проблема заключалась в контрольных суммах, поскольку, насколько я помню, их нет даже в данных. По какой причине вы не можете просто направить вывод GNU tar прямо в веб-браузер, вместо того, чтобы писать свой собственный tar-упаковщик?
При таком подходе одна из проблем - предоставить клиенту правильную длину контента. Если вас это не волнует, вы можете просто не отправлять его, и тогда ваш клиент просто не увидит процентный счетчик загрузки. Это может не иметь значения в зависимости от вашего приложения.