
MongoDB란?
- NoSQL 데이터베이스의 한 종류
- 문서 기반(Document-Oriented)의 데이터베이스 시스템
- 관계형 데이터베이스의 테이블 대신 JSON/BSON 형식의 동적인 문서를 사용하여 데이터를 저장하고 조회 ⇒ 이러한 특징은 유연성, 확장성을 가져옴.MongoDB의 구조: Database - Collection - Document
- Database (데이터베이스):
- MongoDB는 여러 개의 데이터베이스를 가질 수 있습니다. 각 데이터베이스는 독립적으로 관리되고 여러 컬렉션을 포함할 수 있습니다.
- 데이터베이스는 일반적으로 관련된 데이터를 그룹화하는 데 사용됩니다.
- Collection (컬렉션):
- 컬렉션은 문서(Document)의 그룹입니다. 테이블과 유사하게 데이터를 저장하며 스키마가 없어 유연한 구조를 가지고 있습니다.
- 서로 다른 Document들이 하나의 컬렉션에 저장될 수 있습니다.
- Document (문서):
- 문서는 MongoDB에서의 기본 데이터 단위로, JSON 형태의 키-값 쌍을 갖습니다.
- 각 문서는 서로 다른 구조를 가질 수 있으며, 필요에 따라 필드를 동적으로 추가할 수 있습니다.
- Document는 Collection 내에 저장되며, 각 Document는 고유한 ObjectId를 가집니다.
MongoDB Collection:
{
"collection_name": "users",
"documents": [
{
"_id": ObjectId("5fde7b8e69e01b3f95277b10"),
"name": "John Doe",
"age": 30,
"city": "New York",
"skills": ["JavaScript", "Python", "MongoDB"],
"address": {
"street": "123 Main St",
"city": "New York",
"zipcode": "10001"
}
},
{
"_id": ObjectId("5fde7c1569e01b3f95277b11"),
"name": "Jane Smith",
"age": 25,
"city": "San Francisco",
"skills": ["Java", "C++", "SQL"],
"address": {
"street": "456 Oak St",
"city": "San Francisco",
"zipcode": "94105"
}
},
// Additional documents...
]
}
MongoDB Document:
{
"_id": ObjectId("5fde7b8e69e01b3f95277b10"),
"name": "John Doe",
"age": 30,
"city": "New York",
"skills": ["JavaScript", "Python", "MongoDB"],
"address": {
"street": "123 Main St",
"city": "New York",
"zipcode": "10001"
}
}
RDBMS의 구조와의 비교:
- Database (데이터베이스):
- RDBMS에서의 Database는 일반적으로 정형화된 테이블들을 그룹화하고, 각 테이블은 고정된 스키마를 가집니다.
- Table (테이블):
- RDBMS의 Table은 정해진 스키마를 가진 열과 행의 구조로 이루어져 있습니다.
- 각 테이블은 레코드(행) 단위로 데이터를 저장하며, 각 레코드는 미리 정의된 열에 맞춰진 데이터를 가집니다.
- Row (레코드):
- RDBMS에서의 레코드는 각각의 테이블에 속하는 하나의 행을 나타냅니다.
- 각 레코드는 테이블의 스키마에 따라 고정된 구조를 가지고 있습니다.
주요 특징 및 개념
문서 기반 데이터베이스
- MongoDB는 데이터를 문서(Document)라는 단위로 저장합니다. 각 문서는 키-값 쌍으로 이루어진 BSON(Binary JSON) 형식으로 표현되며, 여러 문서가 컬렉션(Collection)에 저장됩니다.
유연한 스키마
- MongoDB는 동적 스키마(Dynamic Schema)를 사용하므로, 각 문서가 다른 구조를 가질 수 있습니다. 필드를 동적으로 추가하거나 제거할 수 있어 데이터 모델의 변경이 유연하게 이루어집니다.
JSON/BSON 형식
데이터는 JSON과 유사한 문서 구조를 사용하며, MongoDB에서는 BSON 형식으로 이진화되어 저장됩니다. 이는 대용량 데이터 처리 및 전송에서 성능 향상을 가져옵니다.
JSON
{ "name": "John", "age": 30, "city": "New York" }BSON : JSON의 이진 표현 형식으로, JSON과 유사하지만 이진 데이터로 표현됩니다.
\x16\x00\x00\x00 // 전체 크기 \x02 // 문자열 타입 name\x00 // 필드 이름 \x04\x00\x00\x00John\x00 // 문자열 값 \x10\x00 // 16 (숫자 타입) age\x00\x00\x00 // 필드 이름 \x1E\x00\x00\x00 // 30 (숫자 값) \x02\x00 // 문자열 타입 city\x00 // 필드 이름 \x0C\x00\x00\x00New York\x00 // 문자열 값 \x00 // 마지막BSON은 이진 형식이므로 직렬화 및 역직렬화가 JSON보다 빠르게 이루어집니다. MongoDB는 BSON을 내부 저장 형식으로 사용하므로 데이터베이스의 입출력이 효율적으로 처리됩니다.
높은 확장성
MongoDB는 수평적 확장이 가능합니다. 여러 서버에 데이터를 분산하고 데이터베이스의 용량을 증가시킬 수 있어 대규모 애플리케이션에 적합합니다.
수평적 확장
: 수평적 확장을 위해선 데이터의 파티셔닝이나 샤딩(Sharding)과 같은 기술이 필요하며, 이는 구현 및 관리가 복잡할 수 있습니다. MongoDB는 처음부터 수평적 확장을 염두에 두고 설계되었으며, 데이터를 자동으로 분산 및 관리하는 기능을 내장하고 있어 비교적 쉽게 수평적 확장이 가능합니다.
인덱싱과 검색 기능
- MongoDB는 인덱싱을 지원하여 데이터의 검색 속도를 향상시킵니다. 다양한 쿼리와 검색 연산자를 활용하여 유연한 데이터 검색이 가능합니다.
자동 샤딩(Sharding)
대용량의 데이터를 처리하기 위해 자동 샤딩 기능을 제공합니다. 이를 통해 데이터베이스가 수평으로 확장되어 성능을 유지할 수 있습니다.
샤딩(Sharding)
1. Increased read/write throughput
: 데이터를 여러 샤드에 분산시켜 병렬로 작업을 수행하므로 읽기/쓰기 처리량이 증가하며, 각 샤드 추가는 처리량을 선형적으로 확장시킵니다.2. Data Locality
: Zone Sharding 을 통해 지리적으로 분산된 애플리케이션을 지원하고, 데이터의 저장 위치를 특정 지역에 강제화하여 데이터의 지역성을 제어할 수 있습니다.
'Database' 카테고리의 다른 글
| Database. 4일차 - MongoDB의 데이터 타입 (0) | 2024.02.19 |
|---|---|
| Database. 4일차 - MongoDB의 기본 명령어 (0) | 2024.02.19 |
| Database. 3일차 - NoSQL의 데이터 타입 (0) | 2024.02.19 |
| Database. 3일차 - NoSQL의 주요 종류 (0) | 2024.02.19 |
| Database. 3일차 - NoSQL (0) | 2024.02.19 |