티스토리 뷰

Database

[MongoDB] BSON(Binary JSON)

집사킴 2023. 1. 23. 15:48
728x90

BSON(Binary JSON)

  • JSON과 유사한 문서를 바이너리 형태로 인코딩한 데이터 포맷
  • 날짜 타입, BinData 타입 등 JSON보다 많은 타입을 지원
  • Protocol Buffer, Thrift와 같은 바이너리 교환 형식(Binary Interchange Format)
  • BSON은 Protocol Buffer 대비 schema-less 하여 유연하다는 장점이 있지만, 직렬화된 데이터의 필드명에 대한 오버헤드가 있어 공간 효율성 면에서 약간의 단점이 있다

 

특징

  1. 가볍다
  2. 쉬운 데이터 순회 (Traversable)
    • 타입과 길이 정보를 인코딩하여 순회를 빠르게 할 수 있다
  3. 효율적이다
    • 문서 맨 앞에 길이 정보를 포함하고 있어 빠르게 스캔 및 쿼리 가능
    • C언어의 데이터 타입을 사용하기 때문에 대부분의 프로그래밍 언어에서 인코딩과 디코딩이 빠르다

 

MongoDB가 BSON을 사용하는 이유

  1. JSON은 데이터 타입이 제한적이다. 날짜 및 이진 데이터에 대한 지원이 특히 부족하다.
  2. JSON 객체 및 property에는 고정 길이가 없다. 이는 순회를 느리게 만든다.

JSON을 우선시 하면서도 높은 성능을 올리기 위해 BSON이 고안되었다.

 

JSON vs BSON

  JSON BSON
타입 텍스트 포맷 바이너리 포맷
속도 빠른 읽기, 느린 빌드 느린 읽기, 빠른 빌드와 스캔
공간 약간 작은 바이트 사이즈 약간 큰 바이트 사이즈
인코딩 / 디코딩 인코딩 디코딩 없이 API를 통해 전송 가능 - 데이터를 저장하기 전 인코딩 필요.
- 데이터를 디스플레이 하기 전 디코딩 필요.
파싱 사람이 읽을 수 있어 파싱이 필요하지 않음 기계만 읽을 수 있기 때문에 파싱이 필요함
데이터 타입 String, Boolean, Number, Array, Object, null String, Boolean, Number (Integer, Float, Long, Decimal128...), Array, null, Date, BinData
가독성 인간, 기계 기계 전용
사용법 API 등의 네트워크 송수신 데이터베이스에 데이터 저장하기

 

BSON 샘플

{"hello": "world"} →
\\x16\\x00\\x00\\x00           // total document size
\\x02                       // 0x02 = type String
hello\\x00                  // field name
\\x06\\x00\\x00\\x00world\\x00  // field value
\\x00                       // 0x00 = type EOO ('end of object')
 
{"BSON": ["awesome", 5.05, 1986]} →
\\x31\\x00\\x00\\x00
 \\x04BSON\\x00
 \\x26\\x00\\x00\\x00
 \\x02\\x30\\x00\\x08\\x00\\x00\\x00awesome\\x00
 \\x01\\x31\\x00\\x33\\x33\\x33\\x33\\x33\\x33\\x14\\x40
 \\x10\\x32\\x00\\xc2\\x07\\x00\\x00
 \\x00
 \\x00

 


참고자료

https://bsonspec.org/

https://www.mongodb.com/json-and-bson

https://www.mongodb.com/basics/bson

728x90

'Database' 카테고리의 다른 글

Redis DataType 간단 정리  (1) 2023.05.13
[MongoDB] Schema Design Pattern  (0) 2023.01.21
[MongoDB] 샤딩 전략 - Ranged Sharding, Hash Sarding, Zone Sharding  (0) 2023.01.19
[MongoDB] Sharded Cluster  (0) 2023.01.17
[MongoDB] Replica Set  (0) 2023.01.15
댓글
300x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함