C로 구현된 Parquet 라이브러리, 성능과 이식성을 잡다!

by DD
5개월 전
조회수 11

Carquet은 C 언어로 구현된 Parquet 파일 처리 라이브러리로, C++ 기반의 Apache Arrow 대비 가벼운 의존성을 가짐.

SIMD 최적화메모리 맵 I/O를 지원하며, 임베디드 시스템 및 C 코드베이스 환경에 적합하도록 설계됨.

커뮤니티에서는 성능 벤치마크 결과와 Apache Arrow와의 비교를 통해 Carquet의 장단점을 분석하며, 특정 환경에서의 활용 가능성에 주목함.

Carquet 아키텍처 및 SIMD 최적화

Carquet은 C11 표준을 준수하며, zstdzlib만을 외부 의존성으로 가진다. 구체적으로, SIMD(SSE4.2, AVX2, AVX-512, NEON, SVE) 최적화를 통해 다양한 아키텍처에서 높은 성능을 제공한다. 따라서, ARM CRC32 하드웨어 가속을 활용하여 데이터 무결성을 보장하고, 메모리 맵 I/O를 통해 대용량 파일 읽기 성능을 향상시킨다.

Apache Arrow와의 성능 비교 및 트레이드오프

Carquet은 Apache Arrow에 비해 ARM 환경에서 쓰기 및 읽기 속도가 빠르지만, x86 환경에서는 읽기 속도가 느릴 수 있다. 반면, ZSTD 압축 시 파일 크기를 줄이는 데 유리하다. 따라서, 복잡한 nested 타입 지원 및 암호화 기능 부재는 단점으로 지적되지만, C-only 환경에서는 유용한 대안이 될 수 있다.

실전 적용 가이드: 임베디드 시스템 및 C 코드베이스

Carquet은 임베디드 시스템C 코드베이스에서 Parquet 파일 처리가 필요한 경우에 적합하다. 구체적으로, 최소한의 의존성작은 바이너리 크기는 제약된 환경에서 유리하게 작용한다. 따라서, 메모리 사용량을 최소화하고, SIMD 최적화를 활용하여 성능을 극대화하는 것이 중요하다.

Writing a SIMD-optimized Parquet library in pure C: lessons from implementing Thrift parsing, bit-packing, and runtime CPU dispatch