MongoDB 의 bson 소개 및 사용 실례

5037 단어 MongoDBbson
뭐 공부 해요?
BSON 은 json 의 바 이 너 리 형식의 저장 형식 으로 Binary JSON 이 라 고 부 릅 니 다.JSON 과 마찬가지 로 내 장 된 문서 대상 과 배열 대상 을 지원 하지만 BSON 은 JSON 에 없 는 데이터 형식 이 있 습 니 다.예 를 들 어 Date 와 BinData 형식 입 니 다.
BSON 은 인터넷 데이터 교환의 저장 형태 로 사용 할 수 있 습 니 다.이것 은 Google 의 Protocol Buffer 와 유사 하지만 BSON 은 schema-less 의 저장 형태 로 유연성 이 높다 는 장점 이 있 지만 공간 이 용 률 이 이상 적 이지 않다 는 단점 이 있 습 니 다.BSON 은 경 량 성,보편성,효율 성 등 세 가지 특징 이 있 습 니 다.
{"hello":"World"}이것 은 BSON 의 예 입 니 다.그 중에서"hello"는 key name 입 니 다.보통 cstring 형식 입 니 다.바 이 트 는 cstring::=(by te*)"/x00"을 표시 합 니 다.그 중에서*는 0 개 이상 의 by te 바이트,/x00 은 끝 자 를 표시 합 니 다.뒤의"World"는 value 값 입 니 다.그 유형 은 일반적으로 string,double,array,binary data 등 입 니 다.
 
2.bson 이 MongoDB 에서 의 사용
MongoDB 는 데이터 와 네트워크 데이터 교환 을 저장 하기 위해 BSON 이라는 구 조 를 사용 했다.이러한 형식 을 하나의 문서 라 는 개념(Document)으로 바 꿉 니 다.BSON 은 schema-free 이기 때문에 MongoDB 에 대응 하 는 문서 도 이런 특징 이 있 습 니 다.여기 있 는 Document 도 관계 데이터 뱅 크 의 기록(Record)으로 이해 할 수 있 습 니 다.다만 여기 있 는 Document 의 변화 가 더욱 풍부 합 니 다.예 를 들 어 Document 는 끼 워 넣 을 수 있 습 니 다.
MongoDB 가 BSON 을 저장 구조 로 하 는 중요 한 이 유 는 보편성 때문이다.
 
BSON 의 예
3.1 문서 의 BSON 은 다음 과 같이 말 했다.


title:"MongoDB", 
last_editor:"192.168.1.122", 
last_modified:new Data("27/06/2011"), 
body:"MongoDB introduction", 
categories:["Database","NoSQL","BSON"], 
revieved:false 

이것 은 간단 한 BSON 구조 체 로 그 중의 모든 element 는 key/value 쌍 으로 구성 되 어 있다.
3.2 포 함 된 예


name:"lemo", 
age:"12", 
address:{ 
city:"suzhou", 
country:"china", 
code:215000 

scores:[ 
{"name":"english","grade:3.0}, 
{"name":"chinese","grade:2.0} 


이것 은 상대 적 으로 복잡 한 예 로 주소 대상 과 점수 대상 배열 을 포함한다.여 기 는 포 함 된 문서 대상 과 문서 대상 데 이 터 를 사용 하여 한 학생 의 정 보 를 나타 내 는데 이런 포 함 된 문서 구 조 는 관계 데이터 베 이 스 를 사용 하 는 것 이 비교적 복잡 하 다.
 
4.BSON c++코드 분석
MongoDB 소스 코드 트 리 에는 BSON 의 코드 라 이브 러 리 가 포함 되 어 있 습 니 다.bson.h 라 는 헤더 파일 만 포함 하면 됩 니 다.그 중에서 네 가지 유형 이 중요 합 니 다.

* mongo::BSONObj, BSON  
* mongo::BSONElement, BSON   
* mongo::BSONObjBuilder, BSON  
* mongo::BSONObjIterator, BSON  
다음은 BSON 대상 만 들 기

BSONObjBuilder b; 
b.append("name","lemo"), 
b.append("age",23); 
BSONObj p = b.obj(); 
혹은

BSONObj p = BSONObjBuilder().append("name","lemo").append("age",23).obj(); 
아니면 흐 르 는 방법 으로.

BSONObjBuilder b; 
b << "name" << "lemo" << "age" << 23; 
BSONObj p = b.obj(); 
매크로 로 대상 을 만 들 거나

BSONObj p = BSON( "name" << "Joe" << "age" << 33 ); 
여기 서 이 네 가지 유형의 코드 를 분석 해 보 자.
mongo::BSONObj 는 주로 BSON 대상 을 저장 하 는 데 사 용 됩 니 다.구체 적 인 저장 형식 은 다음 과 같 습 니 다.

 <unsigned totalSize> {<byte BSONType><cstring FieldName><Data>}* EOO 
        --------------------              -------------                -----------------               ----           --- 
totalSize: ,  
BSONType: , Boolean,String,Date , bsontypes.h  
FieldName:  
Data: , BSONType  
* :  
EOO: , /x00  
일반적으로 BSONObj 의 생 성 은 BSONObjBuilder 를 통 해 이 루어 집 니 다.바이트 흐름 을 얻 지 않 는 한 BSONObj 를 직접 생 성 할 수 있 습 니 다.
 
mongo::BSONElement 는 주로 대상 의 단일 요 소 를 저장 하 는 데 사 용 됩 니 다.저장 형식 은 다음 과 같 습 니 다.

<type><fieldName><value> 
이 대상 은 주로 BSONObj 대상 의 구체 적 인 요 소 를 가리 키 는 주소 로 요 소 를 실제 저장 하지 않 는 값 입 니 다.
mongo::BSONObjBuilder 는 주로 BSONObj 를 생 성 하 는 데 사 용 됩 니 다.이 대상 은 StringBuilder 를 통합 시 켰 습 니 다.주로 실제 바이트 점 을 저장 하고 std:stringstream 을 교체 하 는 데 사 용 됩 니 다.이 StringBuilder 는 BufBuilder 를 통합 시 켰 습 니 다.이것 은 동적 으로 메모리 버퍼 를 증가 시 킬 수 있 지만 최대 용량 은 64MB 의 크기 를 초과 할 수 없습니다.즉,BSONObj 는 최대 64MB 를 초과 할 수 없습니다.
 
mongo::BSONOBjIterator 는 주로 BSONObj 대상 의 모든 요 소 를 옮 겨 다 니 며 stl iterator 와 유사 한 인 터 페 이 스 를 제공 합 니 다.또한 ForEach 매크로 를 제공 하여 더욱 편리 한 조작 을 제공 합 니 다.예 를 들 어

if (foo) { 
           BSONForEach(e, obj) 
               doSomething(e); 
       } 

좋은 웹페이지 즐겨찾기