2013-03-07 5 views
0

여러 개의 JSON 객체를 파일에 기록 할 수 있어야하는 솔루션이 있습니다. 본질적으로 하루에 하나의 로그 파일을 수행합니다. 단일 파일에서 이들을 작성하고 나중에 읽는 가장 쉬운 방법은 무엇입니까?하나의 파일에 여러 JSON 객체 로깅 - 파일 형식

MongoDB는 BSON으로 이것을 어떻게 처리합니까? "레코드"사이의 구분자로 사용되는 것은 무엇입니까?

프로토콜 버퍼, BSON, MessagePack 등은 압축 및 레코드 개념을 제공합니까? 압축은 좋은 이점이 될 것입니다. 프로토콜

답변

0

다음과 같이 메시지를 정의 할 수 있습니다 버퍼 :

Message JSONObject { 
    required string JSON = 1; 
} 

Message DailyJSONLog { 
    repeated JSONObject JSON = 1; 
} 

이 방법 당신은 메모리에서 파일을 읽고 그것을 역 직렬화 것이다. 본질적으로 그것들을 직렬화하는 것과 같은 방식입니다. 디스크에 파일 (일련 번호 DailyJSONLog)이 있으면 일련 번호 JSONObject을 파일 끝 부분에 쉽게 추가 할 수 있습니다 (DailyJSONLog 메시지는 매우 단순한 반복 필드이기 때문에).

유일한 문제는 매일 많은 메시지가 있거나 하루 중 특정 위치에서 시작하려는 경우입니다 (중간에 (또는 임의적으로) 쉽게 도달 할 수없는 경우). 반복 목록).

나는 이것을 JSONObject으로 가져 와서 그것을 직렬화 한 다음 base64로 인코딩했다. 나는이 파일을 새로운 줄로 구분하여 저장하고 싶다. 이렇게하면 각 파일에 몇 개의 레코드가 있는지 쉽게 볼 수 있고 파일 내의 임의의 JSON 객체에 액세스 할 수 있으며 파일을 쉽게 확장 할 수 있습니다. (위의 '반복되는'메시지도 확장 할 수 있지만 매우 단순합니다. 편도 쉬운 조작 ...)

압축은 다른 주제입니다. 프로토콜 버퍼는 문자열을 압축하지 않습니다. JSON 메시지와 일치하도록 pb 메시지를 정의한다면, pb가 어떤 정수라도 [varint][1] 인코딩 형식으로 '압축'할 수있는 이점을 얻을 수 있습니다. base64 인코딩 경로 이상으로 시도하면 '압축'이 줄어 듭니다.