Lsiron
MongoDB 데이터? BSON? 본문
MongoDB는 다양한 데이터 타입을 지원하여 유연한 데이터 모델링을 가능하게 한다. 각 데이터 타입은 BSON(Binary JSON) 형식으로 저장된다.
BSON은 "Binary JSON"의 약자이다. 이는 JSON(JavaScript Object Notation) 데이터 구조를 바이너리 형식으로 인코딩한 것이다. BSON은 JSON과 비슷하지만, 몇 가지 중요한 차이점이 있다.
( 바이너리 형식은 컴퓨터가 데이터를 더 빠르고 효율적으로 처리할 수 있도록 설계된 형식이다.)
BSON의 특징
- 바이너리 형식: JSON은 텍스트 형식인 반면, BSON은 바이너리 형식입니다. 이는 데이터의 크기를 줄이고, 읽기 및 쓰기 속도를 향상시킨다.
- 다양한 데이터 타입: BSON은 JSON에서 지원하지 않는 추가 데이터 타입을 지원한다. 예를 들어, Date, ObjectId, Binary Data, Code 등.
- 크기 필드: BSON 문서는 각 요소의 길이를 포함한다. 이는 MongoDB가 데이터를 빠르게 탐색하고 조작하는 데 도움을 준다.
- 확장성: BSON은 쉽게 확장 가능하며, 새로운 데이터 타입을 추가할 수 있다.
MongoDB에서의 사용
- 입력: MongoDB에 데이터를 입력할 때는 일반적으로 JSON 형식으로 데이터를 작성한다. 예를 들어, 클라이언트 애플리케이션에서 MongoDB로 데이터를 보낼 때 JSON 형식을 사용한다.
- 저장: MongoDB는 이 JSON 데이터를 수신하여 내부적으로 BSON 형식으로 변환하여 저장한다.
- 전송 및 처리: MongoDB 클라이언트 라이브러리는 JSON 형식을 BSON으로 자동 변환하여 MongoDB 서버에 전송하고, 서버에서 BSON 형식을 받아 클라이언트에서 다시 JSON으로 변환하여 처리한다.
즉, 입 / 출력은 JSON으로 하되, mongoDB에서 저장만 BSON형식으로 한다는 뜻이다.
JSON
{
"_id": "507f191e810c19729de860ea",
"name": "John Doe",
"age": 29,
"isVerified": true,
}
BSON ( 바이너리로 인코딩된 예제는 사람이 읽기 어렵다.)
\x16\x00\x00\x00... (바이너리 데이터)
그럼 이제, BSON의 수 많은 데이터 타입이 있지만 주요 데이터 타입에 대해 알아보자. (node.js를 사용한다.)
1. String
- 설명: 일반적인 텍스트 데이터이다.
- 예: "Hello, World!"
{
"string": "Hello World!"
}
2. Integer
- 설명: 정수 데이터를 저장한다. 32비트와 64비트 정수를 지원한다.
- 예: 42, NumberInt(42), NumberLong(42)
{
"integer": 42
}
3. Double
- 설명: 부동 소수점 숫자를 저장한다.
- 예: 3.14159
{
"double": 3.14159
}
4. Boolean
- 설명: 참(true) 또는 거짓(false) 값을 저장한다.
- 예: true, false
{
"boolean": true
}
5. Array
- 설명: 여러 값을 배열로 저장한다.
- 예: [1, 2, 3, "four", true]
{
"array": [1, 2, 3, "four", true]
}
6. Object
- 설명: 중첩된 객체를 저장한다. JavaScript의 객체와 유사하다. object 안은 똑같이 필드와 밸류값으로 적을 수 있다.
- 예: { "name": "Alice", "age": 30 }
{
"object": {
"name": "Alice",
"age": 30
}
}
7. Null
- 설명: null 값을 저장한다.
- 예: null
{
"null": null
}
8. Undefined
- 설명: undefined 값을 저장한다.
- 예: undefined
{
"undefined": undefined
}
9. Date
- 설명: 날짜와 시간을 저장한다. ISODate 형식을 사용한다.
- 예: new Date("2021-07-04T08:00:00Z")
{
"date": ISODate("2021-07-04T08:00:00Z")
}
위 형식은 mongodb 내부에서 돌아가는 BSON 자료구조이고 지금 내가 사용하는 node.js 환경에서는 꼭 BSON 자료형으로 넘겨주지 않고 어떤 자료형은 아래와 같이 Node.js 내부 자료형으로 넘겨줘도 된다.
{
"date": new Date("2021-07-04T08:00:00Z")
}
10. ObjectId
- 설명: 각 도큐먼트를 유일하게 식별하는 ID를 저장한다. 12바이트로 구성되어 있다. 즉, MongoDB에서 각 Document의 Primary Key의 값으로 사용된다. 모두 16진수로 저장이 된다.
- _id 필드 값을 따로 설정하지 않으면 ObjectId 객체가 저장되며, 따로 설정한 경우 해당 값으로 저장할 수 있다.
- 예: ObjectId( "507f1f77 : 유닉스시간-저장된 시간 , bcf86c : 기기id , d799 : 프로세스id , 439011 : 카운터 " )
- 즉, 시간별로 다르고 기기별로 다르고 프로세스별로 다르다는 뜻 이 세 개가 모두 일치하다 해도, 카운터값은 매 번 올라가기 때문에 다르게 된다.
{
"_id": ObjectId("507f191e810c19729de860ea")
}
따라서 주로 보게될 Document 들은 아래와 같은 형식으로 이루어져있다.
{
"_id": "507f191e810c19729de860ea",
"name": "Lsiron",
"age": 28,
"isVerified": true,
"balance": 1234.56,
"interests": ["reading", "travelling"],
"address": {
"street": "1 Main St",
"city": "New York"
}
}
'데이터베이스 > MongoDB' 카테고리의 다른 글
MongoDB 쿼리연산자 (0) | 2024.07.07 |
---|---|
MongoDB 다뤄보기(insert, find, update, delete, query) (0) | 2024.07.04 |
MongoDB 구조 (0) | 2024.07.04 |
MongoDB IP 화이트리스트 추가, db접속 오류 (0) | 2024.06.16 |