본문 바로가기

NoSQL

[MongoDB] 도큐먼트(Document), 컬렉션(Collection), 데이터베이스(Database) 개념

반응형

 


 

도큐먼트(Document)

 - 몽고DB 데이터의 기본 단위이다. (RDBMS 의 행에 대응된다.)
 - 정렬된 키(Key)와 연결된 값(Value)의 집합으로 이루어져 있다.

{"Key" : "Value"}

 - 대부분의 도큐먼트는 다중 키(Key)/값(Value)을 가진다.

{"Key1" : "Value2", "Key2" : "Value3"}

 - 키(Key)는 문자열이어야 한다. (NULL 포함하지 않으며 .과 $ 문자는 예약어로 취급)
 - 데이터형과 대소문자를 구별한다. 아래의 두 도큐먼트는 서로 다르다.

{"count" : 2}
{"count" : "2"}
{"count" : 2}
{"Count" : 2}

 - 키(Key)는 중복될 수 없다. 아래 도큐먼트는 name 이라는 키가 중복이 되어 올바르지 않은 형식이다.

{"name" : "철수", "name" : "영희"}

 

 

컬렉션(Collection)

 - 도큐먼트의 모음이다. (RDBMS 의 테이블에 대응된다.)
 - 컬렉션은 동적 스키마를 가진다. 동적 스키마란, 하나의 컬렉션 내 도큐먼트들이 모두 다른 구조를 가질수 있다는 말이다. 아래와 같이 다른 구조를 가진 도큐먼트들을 하나의 컬렉션에 저장할 수 있다.

{"name" : "철수", "age" : 22}
{"region" : "서울"}

 - NULL 문자, $문자(예약어), system.(시스템 예약어) 으로 시작하는 컬렉션명은 사용할 수 없다.

다른 구조를 가진 도큐먼트들을 하나의 컬렉션에 저장할 수 있다면,
하나의 컬렉션에 모든 도큐먼트들을 넣으면 되지 않을까?

결론을 먼저 이야기하면, 별도의 컬렉션 구분이 필요하다.

1. 같은 컬렉션에 다른 종류의 도큐먼트를 저장하면 관리하기가 번거로워진다. 예를 들어, 블로그 게시물을 쿼리한 데이터 중 작성자 데이터만 제거하려면 상당히 번거로울 것이다.
2. 컬렉션별로 목록을 뽑으면 하나의 컬렉션 내 특정 데이터형별로 쿼리해서 목록을 뽑을 때보다 훨씬 빠르다.
3. 같은 종류의 데이터를 하나의 컬렉션에 모으면 데이터 지역성에 좋다. 블로그 게시물 여러 개를 뽑는 경우, 게시물과 저자 정보가 섞인 컬렉션보다 게시물만 들어 있는 컬렉션에서 뽑을 때 디스크 탐색 시간이 더 짧다.
4. 만약 인덱스를 만들면 도큐먼트는 특정 구조를 가져야 한다. (고유 인덱스의 경우, 더 그렇다.) 인덱스는 컬렉션별로 정의한다. 같은 유형의 도큐먼트를 하나의 컬렉션에 넣음으로써 컬렉션을 효율적으로 인덱싱할 수 있다.

이러한 이유로 관련된 유형의 도큐먼트를 그룹화한다.

서브 컬렉션

 .(마침표) 문자를 사용해 컬렉션을 체계화하는데 사용된다. 예를 들어, 블로그 기능이 있는 애플리케이션은 blog.posts 와 blog.authors 라는 컬렉션을 가질 수 있다. 이는 단지 체계화를 위함이며 blog 컬렉션이나 자식컬렉션과는 아무 관계가 없다.

 

 

데이터베이스(Database)

 - 빈 문자열("")은 데이터베이스 이름에 사용할 수 없다.
 - /,\, ., ', `,*, <, >, :, ?, $, NULL 의 문자를 데이터베이스 이름에 포함할 수 없다.
 - 데이터베이스 이름은 대소문자를 구별하며, 크기는 최대 64바이트이다.

1. admin 데이터베이스

 - 몽고DB의 관리자 데이터베이스로, 전체 시스템에 대한 관리자 권한을 관리한다.
 - 사용자를 생성하고 권한을 부여하거나 변경하는 작업을 수행할 수 있다.
 - 서버 구성 및 설정을 변경하는 명령어를 실행할 수 있다.

2. config 데이터베이스

 - 샤딩된 몽고DB 클러스터에서 각 샤드의 정보를 저장한다.
*샤딩(sharding)은 대용량 데이터베이스 시스템에서 데이터 분산을 통해 성능과 확장성을 향상시키기 위한 기술이다. 데이터를 여러 개의 작은 부분(샤드)으로 나누어 서로다른 서버에 분산 저장하는 방법이다.

3. local 데이터베이스

 - 특정 서버 인스턴스에 로컬로만 저장되는 데이터베이스이다.
 - 복제 및 클러스터링 관련 데이터를 저장한다.
 - 복제본 셋이나 샤드 구성 변경 시의 임시 데이터를 저장한다.
 - 복제본 셋의 구성원 정보와 상태를 저장한다.
 - startup_log: 서버 시작 시의 로그 정보를 저장한다.

 

반응형