반응형

샤딩은 데이터베이스를 작은 조각으로 분할하여 단일 머신이 모든 데이터를 저장하거나 전체 로드를 처리하지 않도록 하기 위해 고안된것이다.

 

12.1 샤딩 개관

12.1.1 샤딩이란 무엇인가?

샤딩은 대규모의 데이터 세트를 작고 관리하기 쉬운 조각으로 분할하는 과정이다.

12.1.2 언제 샤딩을 할 것인가?

샤딩은 저장소 분산과 부하분산이라는 두가지 주요한 목적을 가지고 있다.

 

12.2 샤드 클러스터 구성 요소의 이해

샤드클러스터 : 샤딩이 가능하도록 하기 위해서는 여러 구성 요소가 함께 작동해야 한다. 모든 것이 함께 기능적으로 작동할 때 이것을 샤드클러스터라고 한다.

샤드는 애플리케이션 데이터를 저장한다.

mongos 라우터는 클러스터 메타데이터를 캐시하고 이를 사용하여 올바른 샤드에 작업을 라우팅하거나 샤딩한다.

 

12.3 샤드된 클러스터에서의 데이터 분산

12.4 샘플 샤드 클러스터 구축하기

12.5 샤딩 클러스터 질의 및 인덱싱

12.6 샤드 키 선택

12.7 실제 서비스에서의 샤딩

장애허용 의 측면에서 보면 어떻게 구성될 경우 어느 서버든지 한 대 까지는 장애가 발생하더라도 클러스터는 계속 동작한다.

12.8 요약

반응형
반응형

MongoDB는 SQL을 사용하지 않는 대신 json과 비슷한 쿼리 언어를 사용한다.

5.1 전자상거래 쿼리

상품 , 카테고리 , 사용자 , 주문 그리고 상품 리뷰에 대한 도큐먼트 구조를 정의 했다. 

 

5.1.1 상품 , 카테고리 , 리뷰

상품 정보 페이지

상품 리스트페이지

 

findOne vs find쿼리

findOne는 도큐먼트를 반환하는 반면에 find는 커서 객체를 반환한다.

findOne은 비록 제한을 적용해도 커서가 반환되기는 하다.

db.products.find({'slug':'wheel-barrow-9092'}).limit(1)

 

skip, limit그리고 쿼리 옵션

 

상품 리스트 페이지

이웃 카테고리는 상위 카테고리가 같은 카테고리들이므로 이웃 카테고리에 대한 쿼리는 간단하다.

 

5.1.2 사용자와 주문

 

5.2 MongoDB의 쿼리 언어

5.2.1 질의 조건과 셀렉터

범위

$lt ~보다 작은

$gt ~보다 작은

$lte ~보다 작거나 같은

$gte ~보다 크거나 같은

 

집합 연산자

$in 어떤 인수든 하나라도 참고 집합에 있는 경우 일치

$all 모든 인수가 참고 집합에 있고 배열이 포함된 도큐먼트에서 사용되는 경우 일치

$nin 그 어떤 인수도 참고 집합에 있지 않을 경우 일치 

 

부울 연산자

$ne 인수가 요소와 같지 않은 경우 일치

$not 일치 결과를 반전시킴(반대로 만듦)

$or 제공된 검색어 집합 중 하나라도 TRUE인 경우 일치

$nor 제공된 검색어 집합 중 그 어떤 것도 TRUE가 아닌 경우 일치

$and 제공된 검색어 집합이 모두 TRUE인 경우 일치

$exists 요소가 도큐먼트 안에 존재할 경우 일치

 

배열

$elemMatch  제공된 모든 조건이 동일한 하위 도큐먼트에 있는 경우 일치

$size 배열 하위 도큐먼트의 크기가 제공된 리터럴 값과 같으면 일치

 

$regex-요소를 제공된 정규 표현식과 맞춰 본다.

 

$mod[(몫),(결과)] 몫으로 나눈 결과가 요소와 일치할 경우 일치

$type 요소의 타입이 명시된 bson타입과 일치할 경우 일치

$text 텍스트 인덱스로 인덱싱된 필드의 내용에 대해 텍스트 검색을 수행할 수 있도록 해준다.

 

 

 

 

출처 MongoDB in Action

반응형
반응형

MongoDB의 도큐먼트 형식은 임의의 데이터 구조를 저장하는 스키마로 잘 알려진 JSON에기반한다.

 

1.1 인터넷에서 태어나다.

1.2 MongoDB의 핵심 기능

1.2.1  도큐먼트 데이터 모델 

MongoDB는 도큐먼트 지향적인 데이터베이스이다.

컬렉션 : 

정규화 : 한 객체의 데이터를 여러개의 테이블로 나누어 표현하는 기법

스키마가 없는 장점:

1.2.2 애드혹 쿼리 ad hoc query를 지원 

1.2.3 인덱스 

B-트리 

1.2.4 복제

1.2.5 속도와 내구성

1.2.6 확장

 

1.3 MongoDB코어 서버와 툴

1.3.1 코어 서버

1.3.2 자바스크립트 셀

1.3.3 데이터베이스 드라이버

1.3.4 커맨드라인 툴

 

1.4 MongoDB를 사용하는 이유

1.4.1 MongoDB와 다른 데이터베이스 비교

간단한 키-값 저장 시스템

정교한 키-값 저장 시스템 

관계데이터베이스 

도큐먼스 데이터베이스 

1.4.2 사용예와 배포

웹 애플리케이션

애자일 개발 

분석과 로깅

캐싱

가변적인 스키마

 

1.5 팁과 한계

MongoDB로 실제 애플리케이션을 개발하고 실제 서비스 되는 시스템은 배포하기 전에 미리 알고 있어야만 하는 한계점이 있습니다.

 

첫번째로 , MongoDB는 보통 64비트 시스템에서 실행되어야 합니다.

가상 메모리 매핑을 사용해서 발생하는 두 번째 결과는 MongoDB가 필요한 경우에 메모리를 자동으로 할당한다는 점이다.

마지막으로 언급할 만한 것은 비록 MongoDB가 단일 노드의 로컬에서 실행해 보기에 매우 단순한 데이터베이스 중 하나이지만 , 대규모의 클래스터를 운영하기 위한 유지비용이 발생할 수 있다.

 

1.6 MongoDB역사

1.8.x 더이상 공식적으로 지원하지 않음 

2.0.x 더이상 공식적으로 지원하지 않음

2.2.x 더이상 공식적으로 지원하지 않음

2.4.x 가장 오래된 안정화 버전

2.6.x 안정화 버전

3.0.x 새로운 안정화 버전

 

1.7 추가적인 자료

 

1.8 요약 

 

02. 자바스크립트 셸을 통한 MongoDB

2.1 MongoDB 셸 검험하기

2.1.1 셸 시작하기

mongo

2.1.2 데이터베이스 , 컬렉션, 도큐먼트

JSON형태로 표현하는 도큐먼트에 저장한다.

MongoDB가 RDBMS의 테이블과 같이 도큐먼트들을 그루핑 할 수 있는 방법이 필요함을 뜻하며 , 이를 컬렉션이라 부른다.

use tutorial

tutorial =>namespace

db.users.find()

 

MongDB의 ID필드

db.users.insert({username:"jones:})

 

질의 술어 넘겨주기

db.users.find()

 

dictionary 형태로 한다.

 

2.1.4 도큐먼트 업데이트

연산자 업데이트

db.users.update({username:""},{contry:""})

 

필드를 추가하거나 값을 설정하기를 원한다면 반드시 $set연산자를 상용

db.users.update({username:""},{$set:{contry:""}})

 

$unset

$push:

$addToSet:두가지 연산자 모두 배열에 아이템을 추가하는데

 

2.1.5 데이터 삭제

db.foo.remove({})

 

db.users.remove({:""})

 

2.1.6 기타 셸 특징

help

db.help()

 

2.2 인덱스 생성과 질의

2.2.1 대용량 컬렉션 생성

 

db.numbers.count()

범위 쿼리

db.numbers.find({num:{"$gt":1995}})

 

2.2.2인덱싱과 explain()

explain는 쿼리가 사용한 인덱스가 있을 경우에 어떤 인덱스를 사용했는지를 찾아서 쿼리 경로에 대한 정보를 제공해 

줌으로써 개발자로 하여금 시간이 많이 소용되는 연산을 찾아내도록 도와준다.

db.numbers.find({num:{"$gt":1995}}).explain("executionStats")

 

2.3 기본적인 관리

2.3.1 데이터베이스 정보 얻기

show dbs

show collections

db.stats()

 

2.3.2 명령어가 작동하는 방식

db.runCommand({dbstats:1})

db.runcommand({collstats:"numbers"})

db.runcommand()

db.$cmd.findOne({collstats:"numbers"})

stats()는 데이터베이스 명령어를 어떻게 호출했는지 기억해보기 바란다.

 

2.4 도움말 얻기

db.help()

db.numbers.help()

save()가 단지 insert()와 update()의 wrapper임을 알 수 있다.

 

2.5 요약

반응형

' > MongoDB in Action 몽도디비 인 액션' 카테고리의 다른 글

12. 샤딩을 통한 시스템 확장  (0) 2020.09.19
05. 쿼리 작성하기  (0) 2020.09.08

+ Recent posts