JSON과 BSON 중 어느 쪽이 더 가볍습니까?
오브젝트를 JSON과 BSON에 직렬화하는 코드를 작성했습니다.제 출력에 따르면 생산된 BSON은 JSON보다 사이즈가 큽니다.이게 예상된 건가요?
내 코드에서 (Jackson 및 bson4jackson 사용)
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private BsonFactory fac = new BsonFactory();
private ObjectMapper mapper = new ObjectMapper(fac);
public Bson(Object obj) throws JsonGenerationException,
JsonMappingException, IOException {
mapper.writeValue(baos, obj);
}
public int size() {
return baos.size();
}
public String toString() {
byte[] bytes = baos.toByteArray();
return new String(bytes);
}
내 것부터Json.class
private ByteArrayOutputStream baos = new ByteArrayOutputStream();
private ObjectMapper mapper = new ObjectMapper();
public Json(Object obj) throws JsonGenerationException,
JsonMappingException, IOException {
mapper.writeValue(baos, obj);
}
(size()
그리고.toString()
위와 같이)
나의 POJO들은Person.class
그리고.Address.class
.
주 수업 시간:
Address a = new Address("Jln Koli", "90121", "Vila", "Belgium");
Person p = new Person("Ali Bin Baba", new Date(), 90.0, 12, a);
List<Person> persons = new LinkedList<>();
persons.add(p);
persons.add(p);
Bson bson = new Bson(persons);
Json json = new Json(persons);
System.out.println("Bson : " + bson.size() + ", data : " + bson.toString());
System.out.println("Json : " + json.size() + ", data : " + json.toString());
출력:
Bson : 301, data : -
Json : 285, data : [{"name":"Ali Bin Baba","birthd...
질문 사항:
- 그 출력은 사실입니까, 아니면 제 코드가 틀렸습니까?
- BSON과 JSON의 사이즈를 비교하기 위해 확인/테스트할 수 있는 방법이 있습니까?
BSON FAQ:
BSON은 공간 효율이 높도록 설계되어 있지만 대부분의 경우 JSON보다 효율이 높지 않습니다.경우에 따라서는 BSON이 JSON보다 더 많은 공간을 사용합니다.BSON 설계 목표의 또 다른 하나는 트래버빌리티입니다.BSON은 길이 접두사와 같은 일부 "추가" 정보를 문서에 추가하여 쉽고 빠르게 이동할 수 있도록 합니다.
BSON은 부호화 및 복호화 속도도 빠를 수 있도록 설계되어 있습니다.예를 들어 정수는 32(또는 64)비트 정수로 저장되므로 텍스트 간에 구문 분석할 필요가 없습니다.이는 작은 정수에 대해 JSON보다 더 많은 공간을 사용하지만 구문 분석 속도가 훨씬 빠릅니다.
문자열 필드의 경우 JSON의 오버헤드는 6바이트(따옴표 4개, 콜론 및 쉼표)입니다.BSON에서는 7 -- 엔트리 타입 바이트, null 터미네이터에서 필드명, 4바이트 문자열 길이, null 터미네이터에서 값입니다.
정수 필드의 경우 JSON 길이는 숫자의 크기에 따라 달라집니다."1"은 단지 1바이트입니다."timeout00"은 7바이트입니다.BSON에서는 이 두 가지 모두 4바이트 32비트 정수가 됩니다.부동소수점 번호도 상황은 비슷합니다.
BSON은 더 작은 것을 의도한 것이 아닙니다.이것은 컴퓨터가 기본적으로 사용하는 구조에 더 가까이 접근하여 보다 효율적으로 작업할 수 있도록 하기 위한 것입니다. 이것이 "빛"의 의미 중 하나입니다.
BSON을 설계한 MongoDB 개발자와 같이 높은 수준의 퍼포먼스를 추구하지 않는다면 JSON을 사용하는 것이 좋습니다.인간의 가독성은 개발자에게 큰 장점입니다.Jackson과 같은 라이브러리를 사용하는 한 나중에 BSON으로 이행하는 것은 어렵지 않습니다.BSON과 JSON의 클래스가 거의 동일한 것을 알 수 있습니다.
사이즈가 문제가 되는 경우는, JSON과 BSON의 양쪽 모두를 적절히 압축할 필요가 있는 것에 주의해 주세요.
★★"foo":"bar"
는 UTF-8 인코딩된 JSON에서 11바이트를 소비합니다.BSON에서는 13을 소비합니다.
bytes description
============================================
1 entry type value \x02
3 "foo"
1 NUL \x00
4 int32 string length (4 -- includes the NUL)
3 "bar"
1 NUL \x00
JSON이 더 컴팩트해지는 경우가 많습니다.
언급URL : https://stackoverflow.com/questions/24114932/which-one-is-lighter-json-or-bson
'bestsource' 카테고리의 다른 글
에이잭스를 사용하여 양식을 제출하다 (0) | 2023.03.10 |
---|---|
Python에서 JSON을 아름답게 하는 방법 (0) | 2023.03.05 |
AngularJS - 모듈 의존관계, 이름 충돌 (0) | 2023.03.05 |
npx create-react-app을 사용하여 react를 설치할 수 없습니다. (0) | 2023.03.05 |
스프링 부트 - 생성되는 연결 수 제한 (0) | 2023.03.05 |