bestsource

JSON과 BSON 중 어느 쪽이 더 가볍습니까?

bestsource 2023. 3. 5. 10:14
반응형

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...

질문 사항:

  1. 그 출력은 사실입니까, 아니면 제 코드가 틀렸습니까?
  2. 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

반응형