programing

BSON은 무엇이고 JSON과 정확히 어떤 차이가 있나요?

golfzon 2023. 3. 25. 12:05
반응형

BSON은 무엇이고 JSON과 정확히 어떤 차이가 있나요?

이제 막 MongoDB를 시작했는데, 제가 깨달은 것 중 하나는 BSON을 사용하여 데이터를 내부에 저장한다는 것입니다.그러나 BSON의 개요와 MongoDB에서의 사용 방법에 대해서는 설명서가 명확하지 않습니다.누가 설명 좀 해주시겠어요?

BSON은 MongoDB가 문서를 컬렉션에 저장할 때 사용하는 JSON 유사 문서의 바이너리 인코딩입니다.JSON에서 지원되지 않는 Date 및 Binary와 같은 데이터 유형에 대한 지원을 추가합니다.

실제로 MongoDB를 사용할 때는 BSON에 대해 많이 알 필요가 없습니다.문서를 작성할 때는 언어의 네이티브 타입과 드라이버의 제공된 타입(ObjectId 등)을 사용하면 드라이버에 의해 적절한 BSON 타입으로 매핑됩니다.

  • BSON이 뭐예요?

    BSON [ bee · sahn ](Bin'ary JSON의 줄임말)은 JSON 유사 문서의 bin'ary-encoded seri-al-iz-a입니다.

  • JSON이랑 뭐가 달라요?

    BSON은 공간 효율이 높도록 설계되어 있지만 경우에 따라서는 JSON보다 효율이 높지 않습니다.경우에 따라서는 BSON이 JSON보다 더 많은 공간을 사용합니다.BSON 설계 목표의 또 다른 하나는 트래버빌리티입니다.BSON은 문자열 및 하위 오브젝트의 길이와 같은 일부 "추가" 정보를 문서에 추가합니다.이것에 의해, 트래버스가 고속화됩니다.

    BSON은 부호화 및 복호화 속도도 빠를 수 있도록 설계되어 있습니다.예를 들어 정수는 32(또는 64)비트 정수로 저장되므로 텍스트 간에 구문 분석할 필요가 없습니다.이는 작은 정수에 대해 JSON보다 더 많은 공간을 사용하지만 구문 분석 속도가 훨씬 빠릅니다.

    BSON은 콤팩트함과 더불어 JSON에서 사용할 수 없는 데이터 유형, 특히 BinData Date 데이터 유형을 추가합니다.

출처 : http://bsonspec.org/

MongoDB는 이진 인코딩 형식의 JSON 문서를 나타내므로 뒤에서 BSON이라고 부릅니다.

BSON은 JSON 모델을 확장하여 Date 및 Binary와 같은 추가 데이터 유형을 제공합니다.이러한 데이터 유형은 JSON에서 지원되지 않습니다.또한 다른 언어에서의 부호화와 복호화에 효율적이기 위해 순서 필드를 제공합니다.

, BSON은 단지 바이너리 JSON(더 많은 데이터 타입을 가진 JSON의 슈퍼셋, 가장 중요한 바이너리 바이트 배열)이라고 할 수 있습니다.

JSON의 시리얼라이제이션 포맷으로 사용하는 Mongodb에는 문서 저장접근을 위한 인코딩 포맷이 포함되어 있습니다.단순히 BSON은 JSON 데이터의 바이너리 인코딩 포맷이라고 할 수 있습니다.

mongoDB에 대한 자세한 내용은http://https://om9x.com/blog/bson-vs-json/ 를 참조해 주세요.

MongoDB는 백그라운드에서 BSON이라고 불리는 바이너리 인코딩 형식의 JSON 문서를 나타냅니다.BSON은 JSON 모델을 확장하여 추가 데이터 유형을 제공하고 다양한 언어로 인코딩 및 디코딩을 효율적으로 수행합니다.

JSON 위에 BSON 인코딩을 사용함으로써 MongoDB는 JSON 문서 내에 있는 원시 형식의 값 위에 인덱스를 작성하는 기능을 얻을 수 있습니다.이는 NoSQL 시스템이 인덱스를 지원하지 않는 것으로 알려져 있기 때문에 효율적인 분석 쿼리를 실행하는 데 도움이 됩니다.

이 비교적 짧은 기사에서는 BSON과 JSON에 대해 꽤 잘 설명하고 있습니다.JSON의 문제점, BSON이 발명된 이유, JSON과 비교하여 해결되는 문제, 그리고 BSON이 당신에게 어떻게 도움이 되는지에 대해 설명합니다.

https://www.compose.com/articles/from-json-to-bson-and-back/

이 기사에서는 JSON으로의 시리얼화가 유효하며, BSON으로의 시리얼화는 불필요하다고 설명하고 있습니다.

OP 질문의 범위를 엄격히 제한하려면:

  1. BSON이 뭐죠?

BSON은 스칼라 타입(int32, int64, 10진수, 날짜 등)과 컨테이너(오브젝트 맵 및 배열)의 풍부한 세트 사양입니다.BSON't 네 b b b b b b b b b b b b b b b b b b b b 。이것은 바이트[] 사양입니다.이 바이트 스트림을 사용하기 위해 바이트 스트림을 언어에 적합한 실제 유형으로 바꿀 수 있는 많은 네이티브 언어 구현이 있습니다.이것들은 코덱이라고 불립니다., BSON Java 실장 입니다.Document를 MongoDB를 .java.util.Map는 .로 해독됩니다.java.util.DateBSON 자바 비단뱀

Java:
import org.bson.*;
MyObject  -->  get() from MyObject, set() into org.bson.Document --> org.bson.standardCodec.encode(Document) to byte[]

XMIT byte[]

python:
import bson
byte[] --> bson.decode(byte[]) to dict --> get from dict --> do something

문자열간 콜 및 문자열간 콜은 관여하지 않습니다.서는없없 없없없다다공백, 큰따옴표 및 이스케이프 문자는 없습니다. Dates,BigDecimal, 및 어레이Long자바 쪽에서 포착된 것은 비단뱀으로 다시 나타난다.datetime.datetime,Decimal, 및 배열int.

이에 비해 JSON은 문자열입니다.JSON용 코덱은 없습니다.JSON 의 전송은 다음과 같습니다.

MyObject --> convert to JSON (now you have a big string with quotes and braces and commas)

XMIT string

parse string to dict (or possibly a class via a framework) 

표면적으로는 동일하지만 스칼라의 JSON 사양에는 문자열과 "번호"만 있습니다(부울과 늘은 제외).를 직접 송신하는 방법은 없습니다.long또는BigDecimalJSON에서는 송신자에서 수신자로, 둘 다 단순한 「번호」입니다.또한 JSON에는 플레인바이트 배열 유형이 없습니다.ASCII가 아닌 모든 데이터는 base64이거나 데이터를 보호하는 방식으로 인코딩하여 문자열로 전송해야 합니다.BSON에는 바이트 배열 유형이 있습니다.생산자가 정하고 소비자가 얻습니다.원하는 유형으로 되돌리기 위한 문자열의 세컨더리 처리는 없습니다.

  1. MongoDB는 BSON을 어떻게 사용합니까?

먼저 콘텐츠의 와이어 프로토콜입니다.또한 데이터의 온디스크 형식입니다.다양한 길이 유형(특히 문자열)은 BSON 사양의 길이 정보를 전송하기 때문에 MongoDB는 오브젝트(필드에서 필드로 홉)를 퍼포먼스하게 통과할 수 있습니다.컬렉션에서 개체를 찾는 것은 인덱스 사용을 포함한 BSON뿐만이 아닙니다.

언급URL : https://stackoverflow.com/questions/12438280/what-is-bson-and-exactly-how-is-it-different-from-json

반응형