MongoDB는 데이터 레코드를 BSON(JSON의 이진표현) 형식으로 저장한다.
{
_id: ObjectId("5099803df3f4948bd2f98391"),
name: { first: "Alan", last: "Turing" },
birth: new Date('Jun 23, 1912'),
death: new Date('Jun 07, 1954'),
contribs: [ "Turing machine", "Turing test", "Turingery" ],
views : NumberLong(1250000)
}
Document, Collection
Document : RDBMS의 row
Collection: Document의 그룹, RDBMS의 table
JSON의 이진 직렬화 형식으로 분산 시스템에서 데이터를 저장하고 전송하기 위해 만들어짐
이진 형식이라 텍스트 형식보다 데이터 크기가 작고 처리 속도가 빠르다.
embedded
embedded 가 사용되는 경우
references
References 가 사용되는 경우
1:1의 경우 Embedded로 참조를 한다.
1:N인 경우 Embedded vs Link 둘 중 하나를 선택하면 되는데 아래와 같은 기준에 따라 선택하면 된다.
Mongodb에는 RDBMS 와 달리 JOIN 대신 lookup를 사용한다.
Mongodb의 Join은 RDBMS의 JOIN 보다 성능이 느리다.
이유는 RDBMS의 JOIN은 병합 조인, 해시 조인 등 여러 조인 전략 중 옵티마이저를 통해 최적의 전략을 선택하나 MongoDB는 단일 조인 전략만 사용한다고 한다.
그래서 JOIN 전 $match나 $project 등을 통해 최대한 JOIN 대상 데이터를 줄이라고 한다.
MongoDB는 샤딩이라는 방법으로 수평 확장을 구현한다.
이러한 방법으로 시스템의 내결함성과 가용성을 향상 시킬 수 있으나 데이터가 균등하게 저장이 되는지, 중복이 발생하는지에 대해 확인해야 하므로 복잡성이 증가할 수 있다.
하나의 데이터베이스 (Primary) 가 Read/Write를 진행하고 다른 데이터베이스에게 데이터를 복제하는 방식
Primary DB가 중단된 경우 Secondary 중 하나를 Primary로 승격시킬 수 있다.
시스템 가용성과 내결함성이 크게 향상된다.