본문 바로가기
프로그래밍 놀이터/안드로이드, Java

[android] FlatBuffers ( json 보다 좋은 format? )

by 돼지왕 왕돼지 2019. 1. 24.
반응형

[android] FlatBuffers ( json 보다 좋은 format? )


http://frogermcs.github.io/flatbuffers-in-android-introdution

binary, cross-platform serializatin, data structure schema, facebook flatbuffer, FB, flatbuffer, flatbuffer compiler, flatc, JSON, no parsing, POJO, serialized data, [android] FlatBuffers ( json 보다 좋은 format? )


-

Facebook 이 대부분의 Android app 에서 JSON 을 FlatBuffers 로 바꾸면서 많은 성능 향상을 이루었다고 발표했다.



-

FlatBuffers 는 Google 의 cross-platform serialization lib 이다.

원래는 game 개발을 목적으로 생성되었으며, UI 를 가진 앱들의 기본인 16ms rule 을 따른다.



-

FlatBuffers 가 효율적인 이유는?

    Serialized data 가 flat binary buffer 라서 parsing 이 필요없다. -> 빠르다

    Buffer 그 자체 이외의 추가적인 메모리 할당이 필요없다. -> 메모리를 적게 쓴다.



-

flatc 라는 FlatBuffers compiler 가 있다.

https://github.com/google/flatbuffers 에서 다운로드 받는다.


이 녀석은 binary -> POJO(data container), JSON -> binary 로 변환하는데 사용된다.

이 변환을 위해서는 data structure schema 가 필요하다.


이 스키마는 아래 문서를 참고하면 된다.

https://google.github.io/flatbuffers/md__schemas.html


flatc 로 commpile 하면 JSON -> bin, POJO 생성을 할 수 있다.

$ ./flatc -j -b repos_schema.fbs repos_json.json


output file 은 아래와 같다.

repos_json.bin

Repos/Repo.java

Repos/ReposList.java

Repos/User.java



-

앱에서 FlatBuffers 를 적용하기 위해서는 client 쪽 lib 을 dependency 로 주어야 한다.

private void loadFlatBuffer(byte[] bytes) {
    ByteBuffer bb = ByteBuffer.wrap(bytes); 
    ReposList reposListFlat = ReposList.getRootAsReposList(bb); 
    for (int i = 0; i < reposListFlat.reposLength(); i++) { 
        Repo repos = reposListFlat.repos(i); 
        Log.d("FlatBuffers", "Repo #" + i + ", id: " + repos.id()); 
    } 
}



-

JSON 과의 비교를 해보자면..

478kB 의 JSON 파일에 대해 약 200ms 의 parsing 시간 소요.

362kB 의 FlatBuffer 파일에 대해 (내용물은 동일) 약 5ms 의 parsing 시간 소요

( 용량과 parsing 모두 효율적이라는 이야기 )



-

Tutorial 느낌의 잘 정리된 자료는 아래 링크

http://gompangs.tistory.com/57




반응형

댓글