Avro VS JSON

itbuddy·2024년 9월 27일

Avro

목록 보기
2/4

이번 포스트에서는 Avro와 우리가 흔히 사용하는 JSON를 비교 해보겠습니다.

Avro의 강점

  • 효율적인 데이터 처리: 컴팩트한 바이너리 인코딩으로 데이터 크기 감소, 네트워크 전송 및 저장 공간 효율성 향상 (요금절약)
  • 스키마 진화 지원: 데이터 구조 변경에 유연하게 대응, 시스템 확장성 용이
  • 빅데이터 환경에 적합: 빠른 처리 속도와 효율적인 저장 방식으로 대용량 데이터 처리에 유리

JSON의 강점

  • 사람이 읽기 쉬운 형식: 텍스트 기반, 데이터 구조 직관적 파악 가능, 디버깅 및 문제 해결 용이
  • 웹 개발 및 NoSQL 데이터베이스에 적합: 웹 서비스 및 NoSQL 데이터베이스와의 호환성 우수

선택 기준

  • 데이터 효율성: 저장 공간 및 전송 속도 중요 → Avro
  • 가독성: 사람이 쉽게 읽고 이해해야 하는 경우 → JSON
  • 스키마 관리: 데이터 구조 변경 가능성 고려 → Avro
  • 빅데이터 처리: 대용량 데이터 처리 및 빠른 속도 요구 → Avro
  • 웹 개발 및 NoSQL 데이터베이스: JSON

Avro VS JSON 공간 효율성 비교

다음표를 보시면 Trip data 기준 압축하지 않은 데이터의 경우 JSON 은 222GB, AVRO는 55.2GB 를 사용하며, JSON-Bzip을 제외한 나머지에서 모두 JSON보다 더 적은 용량을 차지합니다.

  • JSON-Bzip
    avro보다 더 좋은 저장 공간 효율성을 나타낸 JSON-Bzip의 경우는 CPU Time(s)가 avro에 비해 크게는 4~5배정도 시간이 더 들기 때문에 실시간 데이터 처리로는 적합해 보이지 않습니다.
DatasetFormat-codecCompressedRaw size (GB)Storage ratioDuration time (s)CPU Time (s)
Trip dataJSONno222.0100%2826848
Trip dataJSON-Lz4yes22.310%2816402
Trip dataJSON-Snappyyes26.712%2927222
Trip dataJSON-Gzipyes11.55%3249196
Trip dataJSON-Bzipyes6.53%202060201
Trip dataAVROno55.225%2737459
Trip dataAVRO-Snappyyes9.24%3219613
Trip dataAVRO-Deflateyes9.24%4179808
WikimediaJSONno43.8100%2824
WikimediaJSON-Lz4yes5.921%19782743
WikimediaJSON-Snappyyes6.515%19282567
WikimediaJSON-Gzipyes3.68%26202824
WikimediaJSON-Bzipyes2.45%76108007
WikimediaAVROno17.440%19692341
WikimediaAVRO-Snappyyes3.78%24122891
WikimediaAVRO-Deflateyes3.78%28503121

Avro VS JSON 직렬화/역직렬화 성능 비교

AVRO는 JSON에 비해 직렬화/역직렬화에서 JSON 보다 2배 더 좋은 성능을 제공합니다.

1 mln s/d json time 5633 ms
1 mln s/d avro time 2618 ms
2 mln s/d json time 10173 ms
2 mln s/d avro time 5093 ms
3 mln s/d json time 15252 ms
3 mln s/d avro time 7695 ms
4 mln s/d json time 20484 ms
4 mln s/d avro time 10304 ms
5 mln s/d json time 25553 ms
5 mln s/d avro time 13275 ms

  • mln -> 백만을 뜻함

총정리

Avro는 JSON 보다 저장 용량과 CPU 자원을 적게 소모합니다.
Avro를 Kafka, Hadoop등 빅데이터 처리시에 사용하여 인프라 비용을 크게 절감할 수 있습니다.

개인적인 생각

이전에 Bson으로 게임 서버를 만든 것을 본적이 있는데, Bson을 Avro로 대체한다면 좀더 빠른 게임 서버를 만들 수 있지 않을까?


Ref

Storage size and generation time in popular file formats

Json vs Avro serialization micro benchmark

profile
프론트도 조금 아는 짱구 같은 서버 프로그래머

0개의 댓글