FlatBuffers는 특히 게임에 특화 되어 만들어진 Serialization 라이브러리로 C++를 비롯한 주요 언어를 지원 하고 있다.

 

https://github.com/google/flatbuffers

 

FlatBuffers의 설계 디자인은 2 계통의 유파가 있어서 C++(Go, Python), Java(C#, PHP)로 나누어져 있다.(라고 해도 ByteBuffer를 사용하거나 자체적으로 Offset 계산을 하는 정도이다)

 

 

 

FlatBuffer의 장점과 단점

장점

encode/decode의 구현이 좋으며, 빠르다.

IDL 코드 자동 생성.

union의 형 표현도 가능하면서 정적인 강한 형을 사용할 수 있어서 유연하다.

 

단점

버퍼 내용을 상상하면서 구축하지 않으면 encode 시 오류에 빠지다.

(특히 빠지기 쉬운 패턴은 왜 문자열을 만들지 못하지? vector를 만들지 못하지? 라고. 에러나 문서가 적어서 이런 오류에 쉽게 빠진다)

문서가 적다.

언어별 구현이 아직 적다.

 

 

 

어떤 때 FlatBuffers를 사용할 것인가?

Google에서는 ProtocolBuffers가 국내외 불문하고 잘 사용하고 있다(RTB 포맷도 protobuf 다) 라고 듣지만 ProtocolBuffers의 설계상(대부분의 deserializer가 안고 있는 설계 상의 문제지만)의 제약으로 한번 모두 parse 하지 않으면 값을 읽을 수 없다는 것이다.

 

가령 256 Mbytes의 데이터가 있을 경우 흔히 있는 포맷에서는 한번 전체를 parse 하지 않으면 데이터가 어디 있는지 알 수 없다. 이 중 몇 군데의 값만 갖고 싶은 경우 이것은 CPU 시간을 낭비한다.

 

FlatBuffers에서는 다소 API의 제한(개발자가 제대로 쌓아야 한다!)과 구조적인 특징을 가지는 것으로 어떤 데이터가 존재하고 있는지 알 수 있고 고속으로 랜덤 접근이 가능하다.

 

FlatBuffers은 아래 사항에 2~3군데 맞는다면 사용하면 좋다고 생각한다.

- 저 성능 디바이스에서도 CPU 시간을 그다지 소비하지 않으면서 값을 읽고 싶다

- json 언어간에 의한 형의 불일치나 object에 대한 bind가 괴로운 것은 이제 싫다.

- Reflection이 없다/ 늦는다 등의 이유로 IDL로부터 생성된 정적인 ser/de를 원한다

- 이미 있는 데이터 세트 중에 일부만 참조 하지만 고속으로 읽고 싶다.

 

 

 

출처: http://labs.gree.jp/blog/2015/11/14495/

 

저작자 표시
신고
by 흥배 2015.12.07 08:00
| 1 |

티스토리 툴바