zstd

1 개의 포스트

Releasing czlib and zstd Go bindings (새 탭에서 열림)

데이터독(Datadog)은 Go 언어의 표준 압축 라이브러리 성능 한계를 극복하기 위해 C 기반의 압축 라이브러리 바인딩인 `czlib`와 `zstd`를 오픈소스로 공개했습니다. 이 라이브러리들은 cgo를 통해 C 라이브러리의 최적화된 성능을 활용하며, 특히 대규모 데이터 파이프라인에서 표준 라이브러리 대비 월등히 빠른 압축 및 해제 속도를 제공합니다. 사용자는 시스템 특성에 맞는 인터페이스를 선택하여 데이터 처리 효율을 극대화할 수 있습니다. **czlib: 표준 zlib의 성능 한계 극복** * `czlib`는 기존 `vitess` 프로젝트의 `cgzip` 패키지를 포크하여 개발되었으며, gzip 헤더 대신 zlib 래핑을 사용하여 인코딩 및 디코딩하도록 수정되었습니다. * Go의 표준 라이브러리(`compress/zlib`)는 순수 Go로 구현되어 있어 C로 작성된 zlib 라이브러리보다 속도가 현저히 느린 경우가 많습니다. * 2KB 크기의 작은 메시지를 대상으로 한 벤치마크 결과, `czlib`의 비스트리밍(Non-streaming) 인터페이스는 표준 라이브러리보다 압축은 약 4.8배, 해제는 약 3.8배 빠른 성능을 보였습니다. * 스트리밍 인터페이스와 배치(Batch) 인터페이스 등 다양한 선택지를 제공하며, 메시지 크기와 워크로드에 따라 성능 차이가 발생하므로 사전 벤치마크가 권장됩니다. **zstd: 차세대 고성능 압축 라이브러리** * lz4의 제작자인 Yann Collet이 개발한 `zstd`(Zstandard)는 zlib를 대체할 수 있는 강력한 범용 압축 알고리즘입니다. * zlib 6단계 설정과 비교했을 때 압축률은 더 우수하면서 압축 속도는 약간 더 빠르고, 특히 압축 해제 속도가 매우 뛰어나다는 장점이 있습니다. * 데이터독의 `zstd` 바인딩은 스트림 압축, 압축 레벨 설정, 사전 계산된 딕셔너리(Pre-computed dictionaries)와 같은 고급 기능을 모두 지원합니다. * 사용 편의성을 위해 Go의 zlib 인터페이스와 유사하게 설계되었으며, 일부 에러 반환 방식을 제외하면 기존 코드를 거의 그대로 대체할 수 있는 드롭인(Drop-in) 교체가 가능합니다. 고성능 데이터 처리가 필요한 환경에서는 Go 표준 라이브러리 대신 cgo 바인딩을 사용하는 것이 유리합니다. 기존 zlib 환경을 유지해야 한다면 `czlib`를, 더 높은 압축 효율과 해제 속도가 필요하다면 `zstd`로 전환하는 것을 고려해 보시기 바랍니다.