BSON 데이터 크기

프로그램 언어/파이썬|2016. 2. 27. 16:02




BSON 데이터  크기 

MongoDB는 데이터를 기본적으로 BSON 형태로 저장합니다.
물론 파이썬에서는 해당 데이터를 읽어와서 자동적으로 파싱해서 출력하죠.(pymongo를 이용할 경우)
그래서 딱히 신경을 잘 안쓰게 되죠.

그런데 말입니다. 만약, 해당 데이터의 크기를 구해야한다면 어떻게 해야할까요?
실제 데이터가 저장될때의 크기를 확인해봐야할 경우를 위해 아래와 같은 방법이 었더라고요.
데이터 크기를 구하는 방법은 MongoDB 스크립트와 조금 비슷합니다.(매우?)

파이썬은 bson 라이브러리가 있습니다.(내장형인지는...)
>>>import bson
>>>len(bson.BSON.encode()
위 함수를 사용하면 됨.
위 함수 사용방법은 아래와 같습니다.
>>>len(bson.BSON.encode(db.collections.find_one())
을 하면 하나의 문서에 대한 용량(기본bytes)로 출력됨.
자세히보면 find_one()을 사용한 것을 볼 수 있습니다. 
그 이유는 하나의 데이터만 인코딩할 수 있기 때문이니다.(리스트 같은건 지원하지 않음.)

Find를 사용하고 싶으면 limit(1)을 통해 하나만 데이터를 불러와서 인코딩을 해야합니다.
즉, 기본적으로 한 문서에 대해서(하나의Bson)만 확인이 가능한 방법인 거죠.

그러면!!!! 여러 개의 데이터의 용량을 구해야 한다면???
이를 for문과 같이 반복문을 사용하면 전체에 대한 용량을 파악할 수 있다.

테스트를 해보니 실제 데이터 보다 조금 크게 나오게 된다(여러개 데이터 출력시)
그 이유는 MongoDB가 기본적적으로 도큐먼트가 포함한 정보가 있습니다. 헤더 정보 같은 것이죠. 그래서 object의 크기가 5바이트씩 비어 있습니다.(여러 데이터면 그 정보도 하나당 하나가 아닌 전체당 하나의 정보를 포함한 형태)
기본적으로 빈 Object의 크기가 5바이트이다.


댓글()