libmongoclient의 JSON parser를 쓰다가 Array에 4096 개라는 제한이 있어서 다른 JSON Parser를 찾아봤다.
속도와 편리성 위주로 고르다 보니 picojson, rapidjson, libjson, vjson 이렇게 넷이 선정되었다.
- 측정 방법: 2만여 JSON 문서를 Parsing 후 2차원 문자열 배열을 stdout으로 출력
- 측정 기준: 실행 시간 측정
- 결과
시간(분:초) | Destructive | Header-only | Writable | Modifiable | |
MongoDB | 3:02 (Parsing Failed: 2797/20072) | X | X | O | X |
picojson | 6:18 | X | O | X | X |
libjson | 3:50 | X | X | O | O |
vjson | 1:45 | O | X | X | X |
rapidjson(destructive mode) | 1:29 | Avail | O | O | O |
- 분석: rapidjson과 vjson은 원본을 복사하지 않고 수정해서 파싱하기 때문에 가장 빨랐다.
vjson을 쓸 수도 있겠지만, 다른 프로그램의 MongoDB 모듈을 모두 대체하려면 Write 기능이 필요해서 rapidjson을 최종 선택하였다.
한 프로그램(JSON parse/modify/write)의 MongoDB 모듈을 rapidjson으로 대체 결과
전체 실행 시간 | 파싱 소요시간 | |
MongoDB | 1분1초 | 29초 |
rapidjson | 33초 | 7초 |
파싱 시간 뿐 아니라 write 시간도 단축 되었음(Building new object -> Modifying).