- F3(Future-proof File Format) 는 차세대 오픈소스 컬럼형 스토리지 포맷으로, 상호운용성, 확장성, 효율성을 핵심 설계 원칙으로 하여 데이터 처리 및 컴퓨팅 환경의 변화마다 새로운 포맷을 만들 필요를 제거
- 각 F3 파일은 자기서술적(self-describing) 구조로, 데이터와 메타데이터는 물론 WebAssembly(Wasm) 바이너리 디코더까지 내장하여 네이티브 디코더가 없어도 모든 플랫폼에서 호환성 보장
- 최신 인코딩 기법(계단식 압축, 벡터화 디코딩)을 포함한 효율적인 스토리지 레이아웃을 제공하며, Parquet와 ORC의 레이아웃 문제점을 개선하여 I/O, 인코딩, 딕셔너리 단위를 분리
- 플러그인 기반 디코딩 API와 Wasm 임베딩 메커니즘을 통해 개발자가 새로운 인코딩 스킴을 쉽게 추가할 수 있으며, 라이브러리 버전에 관계없이 모든 파일을 읽을 수 있어 Parquet의 상호운용성 문제 해결
- 평가 결과 F3의 스토리지 레이아웃 효율성과 Wasm 기반 디코딩의 이점이 입증되었으며, 스토리지 오버헤드는 킬로바이트 수준으로 미미하고 Wasm 디코딩 성능 저하는 네이티브 대비 10~30%로 허용 가능한 수준
배경 및 동기
기존 컬럼형 포맷의 한계
- Parquet와 ORC는 2010년대 초 Hive, Impala, Spark 같은 데이터 분석 시스템을 위해 개발되었으며, 데이터 웨어하우스 및 데이터 레이크 간 데이터 공유를 가능하게 함
- 10년이 지난 현재 연구들은 이 포맷들이 현대 데이터 분석에 부족함을 보여주며, 이는 설계 당시의 구식 하드웨어 성능 가정과 워크로드 접근 패턴 가정에 기반했기 때문
- 지난 10년간 스토리지와 네트워크 성능은 수십 배 향상되었으나 CPU 성능은 그렇지 않아, 시스템이 I/O가 아닌 컴퓨트에서 병목이 발생
- 데이터 레이크의 부상으로 더 많은 데이터가 고대역폭·고지연 클라우드 스토리지(예: Amazon S3)에 저장됨
- 애플리케이션이 더 이상 적은 수의 컬럼을 가진 테이블형 데이터만 저장하지 않음. ML 워크로드에서는 수천 개의 컬럼을 가진 넓은 테이블, 고차원 벡터 임베딩, 대용량 blob(이미지, 비디오) 등을 저장하는 것이 일반적
- 랜덤 액세스나 업데이트를 수행하려는 요구도 증가했으나 기존 포맷은 이런 사용 패턴에 적합하지 않음
- 최근 압축, 인덱싱, 필터링 방법의 발전이 이러한 결함을 해결하려 하지만, 기존 파일 포맷은 쉽게 확장 가능하도록 설계되지 않음
- 새 기능을 추가하더라도 Parquet와 ORC 라이브러리의 다양한 언어 구현이 너무 많아 최신 버전을 기대하기 어려움
- 구버전 라이브러리를 사용하는 시스템은 새 파일의 내용을 해독하지 못할 수 있어, 대부분의 시스템이 최소 공통분모 기능만 지원하여 상호운용성 문제 회피
새로운 파일 포맷들의 등장과 한계
- 이를 극복하기 위해 Meta Nimble, Lance, TSFile, Bullion, BtrBlocks 등 완전히 새로운 파일 포맷 제안들이 등장
- 그러나 이들도 전임자들과 동일한 실수를 범함
- 현대의 하드웨어 및 워크로드 가정에 기반하여 설계
- 새로운 기능을 지원하면서 기존 배포와의 상호운용성을 깨지 않도록 하는 쉬운 확장성을 촉진하지 못함
- 이 중 하나가 Parquet나 ORC를 대체하는 주요 포맷이 되더라도, 10년 후에는 그들의 결함을 해결하기 위해 또 다른 포맷을 만들어야 하는 동일한 문제 발생
F3의 접근 방식
- F3는 상호운용성, 확장성, 효율성을 동시에 달성하는 것을 목표로 함
- F3의 핵심은 다음 세 가지 사양 정의:
- 파일 콘텐츠의 메타데이터
- 파일 내 인코딩된 데이터의 물리적 그룹화 레이아웃
- 데이터의 인코딩 스킴에 구애받지 않는 데이터 액세스 API
- F3의 메타데이터 스킴은 테이블의 컬럼 부분집합을 검색하는 데 필요한 데이터를 최소화
- F3는 Parquet의 포괄적인 "row group" 개념을 없애고 I/O, 인코딩, 딕셔너리 단위를 분리하여 레이아웃 문제 해결
- 계단식 압축과 벡터화 디코딩 같은 최신 방법 통합
F3 개요
전체 구조
- F3 파일은 메타데이터 부분과 데이터 부분으로 구성
- 메타데이터 부분: OptionalData(OptData), Column Metadata(ColMetadata), Footer, Postscript
- 데이터 부분: Row Groups(RG)로 구성되며 실제 데이터 포함
- F3는 Parquet 및 ORC와 동일한 PAX 레이아웃 채택
- 그러나 F3는 기존 포맷과 여러 핵심 차이점 존재:
- 메타데이터가 역직렬화 오버헤드 제거 (Parquet/ORC의 문제점 해결)
- 물리적 I/O Unit(IOUnit) 을 논리적 row group에서 분리하여 스토리지 미디어에 따라 IOUnit 크기를 독립적으로 조정 가능
- 딕셔너리 인코딩 범위를 논리적 row group에서 분리하여 각 컬럼마다 가장 효과적인 범위 결정 가능
- 각 IOUnit는 여러 Encoding Unit(EncUnit) 로 구성되며, EncUnit는 인코딩 및 디코딩의 최소 단위
상호운용성 및 확장성 메커니즘
- F3는 공개 API를 노출하여 구현이 파일 내 압축된 데이터를 디코딩하는 방법 정의
- 인코딩 방법을 플러그인으로 취급하여 핵심 라이브러리와 별도로 설치 및 업그레이드 가능
- 모든 라이브러리 버전이 모든 파일을 읽을 수 있도록 WebAssembly(Wasm) 바이너리로 디코더 구현을 파일 내부에 임베딩
- 즉, 모든 F3 파일에는 데이터와 그 데이터를 읽는 코드가 모두 포함됨
- F3의 API는 네이티브 코드와 Wasm 버전에 대해 별도 구현이 필요 없으며, 동일한 코드가 변경 없이 두 타겟으로 컴파일됨
- 이 설계는 F3를 미래 보장하고, 앞서 설명한 문제를 회피하며, 기존 솔루션보다 빠른 진화 가능
- 개발자는 전체 플릿에서 라이브러리 버전 업그레이드 걱정 없이 Wasm 코드를 파일에 포함시켜 미래 인코딩 방법을 프로덕션 시스템에 배포 가능
- Wasm 바이너리의 스토리지 오버헤드는 미미(킬로바이트 수준)하며, 네이티브 구현 대비 Wasm 디코딩 성능 저하는 최소(10~30%)
결론
- F3는 상호운용성, 확장성, 효율성을 동시에 달성하는 차세대 컬럼형 파일 포맷
- 효율적인 파일 레이아웃 설계로 기존 포맷의 비효율성 해결
- 플러그인 기반 디코딩 API와 Wasm 임베딩으로 라이브러리 버전에 관계없이 모든 파일을 읽을 수 있는 미래 보장 메커니즘 제공
- 프로토타입 평가 결과 레이아웃 설계의 효율성과 Wasm 메커니즘의 실용성 입증
- Wasm 오버헤드는 킬로바이트 수준의 스토리지와 10~30%의 성능 저하로 허용 가능한 범위