나는 다음을 시도합니다 :
- 폴더를 업로드하세요(예:그림) 서버에
- 서버가 입력 스트림을 압축하여 파일에 저장하도록 합니다.
중요한 것은 1)단계는압축되지 않은연결 속도가 매우 빠르고 클라이언트 측의 압축이 느려질 것이라고 생각하기 때문입니다. 더 나아가, 서버확실히압축하지 않고 디렉터리를 저장할 수 있는 충분한 공간이 있어야 합니다. 이상적으로는 서버의 압축이 동시에 발생합니다.
멀티스레드인 한 실제 압축 알고리즘에는 별로 관심이 없습니다.
답변1
예비 참고 사항: 이미지가 이미 압축되어 있다고 가정하면(JPEG, PNG, WEBP...) 어떤 압축을 사용하든,공간적으로는 아무것도 할 수 없습니다.. 단순히 줄여야 할 엔트로피가 없습니다. 따라서 전체 계획이 실패할 수 있습니다.
일반적인 접근 방식은 다음과 같습니다.테이프 아카이브형식(.tar). 디렉토리를 단일 TAR 스트림으로 직렬화하고 인터넷을 통해(예: SSH를 사용하여) 디렉토리를 전송한 후 대상으로 압축할 수 있습니다.
또한 SSH에 내장된 전송 압축을 꺼야 합니다. 그렇지 않으면 애초에 보내는 호스트에서 압축을 수행하지 않아도 아무런 의미가 없습니다.
그것은 마치
tar c Pictures/ | ssh -o "Compression=no" user@server "zstd -15 -T0 > Pictures.tar.zstd"
zstd -T0
zstandard 압축을 위해 가능한 많은 CPU 코어를 사용합니다. 이것이 -15
압축 수준입니다. 15는 매우 잔인하고 -3
gzip보다 낫지만 일반적으로 더 빠릅니다.)를 xz -T0
(병렬 XZip 압축의 경우) 또는 pigz
(병렬 gzip 압축의 경우) 적절하다고 생각하는 대로 교체하세요 . 압축/속도 균형이 매우 좋은 zstd를 추천합니다. xz
속도가 매우 느리고 gzip은 매우 제한된 압축만 생성할 수 있으며 상대적으로 낮은 압축 설정에서는 zstd보다 빠르지 않습니다.
그러나 데이터 암호화에는 압축보다 더 많은 CPU가 필요할 수 있으므로 문제는 실제로 암호화를 수행하지 않는 이유입니다.
zstd -r --stdout Pictures/ | ssh -o "Compression=no" user@server "cat > Pictures.zst"
답변2
압축 파일 시스템을 사용하여 이 작업을 수행할 수 있습니다.
예를 들어 Btrfs 또는 ZFS - 요구 사항에 맞게 호스트에서 압축할 볼륨을 정의하면 됩니다.