티스토리 뷰

반응형

몽고 DB

 

몽고 DB는 강력하고 유연하며 확장성 높은 범용 데이터베이스이다.

- 보조 인덱스(secondary index)

- 범위 쿼리(range query)

- 정렬(sorting)

- 집계(aggregation)

- 공간 정보 인덱스(geospatial index)

 

1.1 손쉬운 사용

몽고 DB는 관계형 데이터베이스가 아니라 도큐먼트 지향 데이터베이스다. 관계형 모델을 사용하지 않는 주된 이유는 분산 확장을 쉽게 하기 위함이지만 다른 이점도 있다.

 

도큐먼트 지향 데이터베이스에서는 행 개념 대신에 보다 유연한 모델인 도큐먼트(document)를 사용한다. 내장 도큐먼트와 배열을 허용함으로써 도큐먼트 지향 모델은 복잡한 계층관계를 하나의 레코드로 표현할 수 있다. 이 방식은 최신 객체 지향 언어를 사용하는 개발자의 관점에 매우 적합하다. 

 

또한, 몽고DB에서는 도큐먼트의 키와 값을 미리 정의하지 않는다. 따라서 고정된 스키마가 없다. 고정된 스키마가 없으므로 필요할 때마다 쉽게 필드를 추가하거나 제거할 수 있다. 덕분에 개발 과정을 빠르게 반복할 수 있어서 개발 속도가 향상된다. 또한 모델을 실험해보기도 쉽다. 

 

1.2  확장 가능한 설계

저장할 데이터가 증가함에 따라 개발자는 '데이터베이스를 어떻게 확장할 것인가'와 같은 어려운 의사 결정을 해야 하는 상황에 직면한다. 

데이터베이스의 확장은 결국 더 큰 장비로 성능 확장(scale-up) 할지 혹은 여러 장비에 데이터를 나눠 분산 확장할지(scale-out) 결정해야 하는 갈림길에 서게 된다.

 

일반적으로 성능 확장(scale-up)이 더 편한 길이지만 단점이 있다. 대형 장비는 대체로 가격이 비싸고 결국에는 더는 확장할 수 없는 물리적 한계에 부딪히고 만다.

 

반면에 분산 확장(sacle-out)은 저장 공간을 늘리거나 처리량을 높이고 서버를 구매해서 클러스터에 추가하는 방법이다 따라서 경제적이고 확장이 용이하다. 하지만 수천대의 장비를 운영해야 하기 때문에 화나의 장비만 관리할 때 보다 관리가 더 어려워진다.

 

몽고DB는 분산 확장을 염두에 두고 설계됐다. 도큐먼트 지향 데이터 모델은 데이터를 여러 서버에 더 쉽게 분산하게 해준다. 도큐먼트를 자동으로 재분배하고 사용자 요청을 올바른 장비에 라우팅함으로써 클러스터 내 데이터 양과 부하를 조절할 수 있다.

 

여러 서버에 걸쳐 샤딩을 사용한 몽고 DB 확장

 

몽고 DB 클러스터의 토폴로지(topology)나 데이터베이스 연결의 다른 쪽 끝에 단일 노드가 아닌 클러스터가 있는지는 애플리케이션에서 분명히 알 수 있다. 따라서 개발자는 애플리케이션을 확장이 아니라 프로그래밍에 집중할 수 있다.  

 

더 큰 부하를 지원하도록 기존에 배포된 애플리케이션의 토폴로지를 변경할 때도 마찬가지로 애플리케이션 로직은 그대로 유지할 수 있다.

 

 

1.3 다양한 기능

몽고DB는 범용 데이터베이스로 만들어졌기 때문에 데이터의 생성, 읽기, 변경, 삭제 외에도 데이터베이스 관리 시스템(DBMS)의 대부분의 기능과 더불어 다음과 같은 기능을 제공한다.

 

- 인덱싱

몽고DB는 일반적인 보조 인덱스를 지원하며 고유(unique), 복합(compound), 공간 정보, 전문(full-text) 인덱싱 기능도 제공한다.

중첩된 도큐먼트(nested document) 및 배열과 같은 계층 구조의 보조 인덱스도 지원하며, 개발자는 모델링 기능을 자신의 애플리케이션에 가장 적합한 방식으로 최대한 활용할 수 있다.

 

- 집계

몽고DB는 데이터 처리 파이프라인 개념을 기반으로 한 집계 프레임워크를 제공한다. 집계 파이프라인(aggregation pipeline)은 데이터베이스 최적화를 최대한 활용해, 서버측에서 비교적 간단한 일련의 단계로 데이터를 처리함으로써 복잡한 분석 엔진을 구축하게 해준다.

 

- 특수한 컬렉션 유형

몽고 DB는 로그와 같은 최신 데이터를 유지하고자 세션이나 고정 크기 컬렉션(제한 컬렉션)과 같이 특정 시간에 만료해야 하는 데이터에 대해 유효시간 (TTL: Time-To-Live) 컬렉션을 지원한다. 또한 기준 필터와 일치하는 도큐먼트에 한정된 부분 인덱스를 지원함으로써 효율성을 높이고 필요한 저장공간을 줄인다.

 

- 파일 스토리지

몽고DB는 큰 파일과 파일 메타데이터를 편리하게 저장하는 프로토콜을 지원한다.

 

관계형 데이터베이스에 공통적으로 사용되는 일부 기능, 특히 복잡한 조인은 몽고 DB에 존재하지 않는다. 몽고DB는 3.2에 도입된 $lookup 집계 연산자를 사용함으로써 매우 제한된 방식으로 조인하도록 지원한다. 3.6 버전에서는 관련 없는 서브쿼리 뿐만 아니라 여러 조인 조건으로 보다 복잡한 조인도 할 수 있다. 두 가지 기능 모두 분산 시스템에서 효율적으로 제공하기 어렵기 때문에, 몽고 DB의 조인은 더 큰 확장성을 허용하기 위한 아키텍처적인 결정이었다.

 

1.4 고성능

몽고 DB의 주요 목표인 성능은 몽고 DB 설계에 지대한 영향을 미쳤다. 몽고DB에서는 동시성(concurrency)과 처리량을 극대화하기 위해 와이어드타이거(WiredTiger) 스토리지 엔진(storage engine)에 기회적 락(opportunistic locking)을 사용했다. 따라서 캐시처럼 제한된 용량의 램으로 쿼리에 알맞은 인덱스를 자동으로 선택할 수 있다. 요약하자면 몽고 DB는 모든 측면에서 고성능을 유지하기 위해 설계됐다.

 

몽고DB는 강력한 성능을 제공하면서도 관계형 시스템의 많은 기능을 포함한다. 하지만 관계형 데이터베이스의 작업을 전부 하려는 것은 아니다. 일부 기능의 경우 데이터베이스 서버는 처리와 로직을 클라이언트에 오프로드한다.(드라이버 또는 사용자의 애플리케이션 코드에 의 해 처리된다.) 이러한 간소한 설계 덕분에 몽고DB는 뛰어난 성능을 발휘한다.

 

 

1.5 몽고 DB의 철학

결국 몽고 DB 프로젝트의 주 관심사는 확장성이 높으며 유연하고 빠른, 즉 완전한 기능을 갖춘 데이터 스토리지를 만드는 일이다.

 

 

출처

https://search.shopping.naver.com/book/catalog/32481967929?query=%EB%AA%BD%EA%B3%A0DB%EC%99%84%EB%B2%BD%EA%B0%80%EC%9D%B4%EB%93%9C&NaPm=ct%3Dl74vfpgg%7Cci%3Ddee02388f64806d5b95e748f8c3620581a70d2c6%7Ctr%3Dboksl%7Csn%3D95694%7Chk%3D4ee1a27cdd0b5603cffcc242b6d17fbc261c8a54

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함