이번 포스트에서는 Avro와 우리가 흔히 사용하는 JSON를 비교 해보겠습니다.
다음표를 보시면 Trip data 기준 압축하지 않은 데이터의 경우 JSON 은 222GB, AVRO는 55.2GB 를 사용하며, JSON-Bzip을 제외한 나머지에서 모두 JSON보다 더 적은 용량을 차지합니다.
| Dataset | Format-codec | Compressed | Raw size (GB) | Storage ratio | Duration time (s) | CPU Time (s) |
|---|---|---|---|---|---|---|
| Trip data | JSON | no | 222.0 | 100% | 282 | 6848 |
| Trip data | JSON-Lz4 | yes | 22.3 | 10% | 281 | 6402 |
| Trip data | JSON-Snappy | yes | 26.7 | 12% | 292 | 7222 |
| Trip data | JSON-Gzip | yes | 11.5 | 5% | 324 | 9196 |
| Trip data | JSON-Bzip | yes | 6.5 | 3% | 2020 | 60201 |
| Trip data | AVRO | no | 55.2 | 25% | 273 | 7459 |
| Trip data | AVRO-Snappy | yes | 9.2 | 4% | 321 | 9613 |
| Trip data | AVRO-Deflate | yes | 9.2 | 4% | 417 | 9808 |
| Wikimedia | JSON | no | 43.8 | 100% | 2824 | |
| Wikimedia | JSON-Lz4 | yes | 5.9 | 21% | 1978 | 2743 |
| Wikimedia | JSON-Snappy | yes | 6.5 | 15% | 1928 | 2567 |
| Wikimedia | JSON-Gzip | yes | 3.6 | 8% | 2620 | 2824 |
| Wikimedia | JSON-Bzip | yes | 2.4 | 5% | 7610 | 8007 |
| Wikimedia | AVRO | no | 17.4 | 40% | 1969 | 2341 |
| Wikimedia | AVRO-Snappy | yes | 3.7 | 8% | 2412 | 2891 |
| Wikimedia | AVRO-Deflate | yes | 3.7 | 8% | 2850 | 3121 |
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
Avro는 JSON 보다 저장 용량과 CPU 자원을 적게 소모합니다.
Avro를 Kafka, Hadoop등 빅데이터 처리시에 사용하여 인프라 비용을 크게 절감할 수 있습니다.
이전에 Bson으로 게임 서버를 만든 것을 본적이 있는데, Bson을 Avro로 대체한다면 좀더 빠른 게임 서버를 만들 수 있지 않을까?