우기TIL
MongoDB 기본 정리 본문
MongoDB는 NoSQL이다.
NoSQL은 고성능 비관계형 데이터베이스를 뜻합니다. NoSQL에 공통적인 특징으로는 관계형모델을 사용하지 않으면서 스키마가 없는것 또 클러스터 환경에서 잘 작동하는 것이 NoSQL에 공통적인 특징입니다. 1
지금부터 NoSQL중에 하나 mongoDB에 대해서 알아봅시다.
MongoDB의 특징
문서 지향적인 데이터베이스입니다.
스키마가 없다.
스케일 아웃이 아주 쉽게 가능하다.
스케일 아웃이 쉽게 가능한것은 DB에서 자체적으로 문서를 재분배 해주고 라우팅 처리를 해주기 때문
범용 데이터베이스로 제작됨
조인과 트랜잭션이 없다..(분산 시스템을 위해서 포기)
엄청난 고성능
기존의 RDBMS에 비하여 수십배의 성능을 발휘
단, 연산과 로직을 서버사이드 또는 클라이언트 사이드에서 처리해야 한다.(데이터 조회만 빠르다는...)
이제 MongoDB의 특징을 파악했으니 본격적으로 MongoDB의 개념을 파악해보자.
문서 Document
정렬된 키와 연결된 값의 집합으로 이루어진 문서
네이밍 naming
문서의 key는 문자열이다.
대소문자를 구별한다.
키에 \0(null 문자)를 포함하지 않는다. (이 문자는 키의 끝을 표시할 때 사용한다.)
.(dot) $(dollar) 특정 상황에만 사용해야 한다. (일반적으로 예약어로 취급한다.)
콜렉션 Collection
문서의 모음, RDBMS 에서는 TABLE이라고 볼 수 있다.
동적 스키마 Dynamic Schema
하나의 콜렉션 문서가 모든 구조를 수용할 수 있다.
단, 저장은 가능하나 일반적으로 데이터형태에 따라서 콜렉션을 분리한다.
같은 콜렉션내에서 다른 형태의 문서를 저장시 개발자가 관리하기 힘듬
콜렉션별로 데이터를 조회하는 것이 한 콜렉션에서 특정 데이터를 조회하는 것 보다 훨씬 빠르다.
인덱싱을 하게 되면 문서는 특정구조를 가져야 한다.(인덱스는 콜렉션별로 정의)
네이밍 naming - 문서와 유사하다.
빈 문자열("") 불가, \0 (null문자) 를 사용할 수 없다.
system.으로 시작하는 콜렉션명은 사용 불가 (예약어)
사용자가 만든 콜렉션에서는 $(dollar) 사용 불가 (예약어)
서브 콜렉션 Sub-Collection
콜렉션을 체계화 하는 방법중 하나인 네임스페이스 .(dot)문자를 사용하여 분리 ( coffee.mocha , coffee.americano)
큰 파일을 저장하는 프로토콜 GridFS는 콘텐츠 데이터와 별도로 메타데이터 저장시 서브 콜렉션 사용
단, 서브 콜렉션은 체계화가 유일한 목적이지 coffee와 coffee.mocha는 전혀 상관없다.
데이터베이스 DB
MongoDB는 DB에 콜렉션을 집합체
단일 인스턴스는 여러 DB를 호스팅 할 수 있다.
하나의 DB는 자체 권한을 가지고 있으면 따로 분리된 파일로 디스크에 저장한다.
네이밍 naming
빈 문자열(" ")은 사용불가
/,|, ., ‘’, *, >, <, :, |, ?, $, (단일 공간), \0(null) 의 문자는 이름으로 사용할 수 없다.
대소문자 구별 (가급적 소문자를 추천)
최대 64바이트이다.
예약된 DB name은 사용불가
admin : root DB
local : 복제되지 않기 때문에 특정 서버에만 저장하는 콜렉션에 사용
config : 샤딩 설정시, 내부적으로 샤드정보를 저장시 사용