MongoDB
MongoDB란?
김만규
2023. 11. 5. 02:02
728x90
반응형
RDB(Relational Database)는 데이타의 독립성이 높고, 고수준의 데이타 조작언어(DML-Data Manipulation Language)을 사용하여 결합, 제약, 투영 등의 관계 조작에 의해 비약적으로 표현능력을 높일 수 있습니다. 또한 이들의 관계 조작에 의해 자유롭게 구조를 변경할 수 있다는 것이 RDB의 특징입니다.
- 데이터의 독립성: 데이터는 테이블에 저장되며, 이 테이블들 사이의 관계를 통해 다양한 조작이 가능합니다.
- DML (Data Manipulation Language): SQL과 같은 언어를 통해 데이터를 효율적으로 조회하고, 조작할 수 있습니다.
- 유연한 구조 변경: 데이터의 구조는 관계 조작을 통해 변경이 가능하며, 이는 데이터베이스의 설계와 유지 보수에 유연성을 제공합니다.
- 조인의 필요성: 데이터의 통합 조회를 위해 조인 연산이 필요하며, 이는 복잡한 조회에 강력한 표현력을 제공합니다.
RDBMS(Relational Database)는 데이터를 서로 관련된 테이블의 모음으로 조직화하여 관리하는 데이터베이스의 한 형태입니다. 이 구조는 데이터의 독립성을 높이는 데 기여하며, 데이터 사이의 관계를 활용해 정보를 효율적으로 저장하고 검색할 수 있게 해줍니다.
- 데이터 중복 방지: 정규화를 통해 데이터 중복을 최소화하고, 데이터 무결성을 유지합니다.
- 복잡한 질의 처리: SQL을 사용하여 복잡한 데이터 처리와 분석이 가능합니다.
- 조인에 의한 성능 저하: 여러 테이블 간의 조인은 처리 성능에 영향을 줄 수 있습니다.
- 확장성 문제: 수직적 확장은 서버의 성능을 높이는 것을 의미하며, 비용이 많이 들고 한계가 있습니다. 반면, 수평적 확장은 데이터베이스를 여러 서버에 분산시키는 것을 의미하며, RDBMS에서는 이를 구현하기 위한 추가적인 논리와 관리가 필요합니다.
- 스키마 변경의 어려움: 스키마 변경은 종종 시간과 노력이 많이 드는 작업입니다.
MongoDB 구조
데이터베이스(Database)
- MongoDB 인스턴스에는 하나 이상의 독립적인 데이터베이스가 존재할 수 있으며, 각 데이터베이스는 고유한 파일 세트를 가지고 파일 시스템에 저장됩니다.
컬렉션(Collection)
- 데이터베이스 내에는 컬렉션이라는 컨테이너가 존재합니다. 컬렉션은 관계형 데이터베이스의 테이블과 유사한 개념이지만, 스키마를 고정하지 않고 다양한 형태의 문서를 담을 수 있습니다.
문서(Document)
- 컬렉션 내의 각 항목을 문서라고 합니다. 문서는 JSON과 유사한 BSON(Binary JSON) 형식으로 데이터를 저장합니다. BSON 형식은 JSON의 모든 기능을 포함하며, 바이너리 형태로 인코딩되어 있어 처리가 빠릅니다.
필드(Field)
- 문서는 여러 개의 키-값 쌍으로 구성됩니다. 각 키-값 쌍은 문서의 필드를 나타냅니다. 값으로는 다양한 데이터 타입을 포함할 수 있으며, 다른 문서나 배열 등 복잡한 데이터 구조도 포함할 수 있습니다.
인덱스(Index)
- MongoDB에서는 데이터 검색 속도를 향상시키기 위해 인덱스를 생성할 수 있습니다. 인덱스는 특정 필드의 데이터를 기반으로 만들어져 데이터 검색 시 성능을 크게 향상시킵니다.
레플리카셋(Replica Set)
- 데이터의 안정성과 가용성을 위해, MongoDB는 레플리카셋을 통한 데이터 복제 기능을 제공합니다. 레플리카셋은 같은 데이터를 가진 여러 서버의 그룹으로, 주 서버에 장애가 발생하면 자동으로 대체 서버가 주 서버 역할을 수행합니다.
샤딩(Sharding)
- 대규모 데이터 분산 처리를 위한 샤딩 기능도 제공합니다. 샤딩을 통해 데이터베이스를 수평적으로 확장하며, 데이터를 여러 서버에 분산시켜 저장함으로써 성능과 용량의 한계를 극복할 수 있습니다.
MongnDB 기본 쿼리
조회 (Find)
db.collection.find({ key: value })
//특정 조건에 맞는 문서 모두 찾기
db.collection.findOne({ key: value })
//단 하나의 문서만 찾기
삽입 (Insert)
db.collection.insertOne({ key: value })
//한 개의 문서 삽입
db.collection.insertMany([{ key1: value1 }, { key2: value2 }])
//여러 문서 삽입
업데이트 (Update)
db.collection.updateOne({ key: value }, { $set: { keyToUpdate: newValue } })
//한 개의 문서 업데이트
db.collection.updateMany({ key: value }, { $set: { keyToUpdate: newValue } })
//조건에 맞는 여러 문서 업데이트
삭제 (Delete)
db.collection.deleteOne({ key: value })
//한 개의 문서 삭제
db.collection.deleteMany({ key: value })
//조건에 맞는 여러 문서 삭제
728x90
반응형