대용량 데이터 처리를 위한 Real MongoDB
도서명:대용량 데이터 처리를 위한 Real MongoDB
저자/출판사:이성욱,윤가희,엮음,/위키북스
쪽수:904쪽
출판일:2018-01-30
ISBN:9791158390921
목차
▣ 01장: MongoDB
1.1 데이터베이스 트렌드
1.2 MongoDB의 라이선스
1.3 MongoDB 버전
__1.3.1 setFeatureCompatibilityVersion 옵션
1.4 MongoDB vs. RDBMS(MySQL)
1.5 MongoDB vs. NoSQL(HBase)
1.6 MongoDB 아키텍처
1.7 MongoDB 배포 형태
__1.7.1 단일 노드(Standalone)
__1.7.2 단일 레플리카 셋(Single Replica-set)
__1.7.3 샤딩된 클러스터(Sharded Cluster)
▣ 02장: 스토리지 엔진
2.1 플러그인 스토리지 엔진
__2.1.1 MongoDB 스토리지 엔진
__2.1.2 스토리지 엔진 혼합 사용
2.2 MMAPv1 스토리지 엔진
__2.2.1 MMAPv1 스토리지 엔진 설정
__2.2.2 데이터 파일 구조
__2.2.3 MongoDB 서버 상태 확인
__2.2.4 운영체제 캐시
__2.2.5 데이터 파일 프레그멘테이션
2.3 WiredTiger 스토리지 엔진
__2.3.1 WiredTiger 스토리지 엔진 설정
__2.3.2 WiredTiger 스토리지의 저장 방식
__2.3.3 데이터 파일 구조
__2.3.4 WiredTiger의 내부 작동 방식
__2.3.5 공유 캐시
__2.3.6 캐시 이빅션(Cache Eviction)
__2.3.7 체크포인트(Checkpoint)
__2.3.8 MVCC(Multi Version Concurrency Control)
__2.3.9 데이터 블록(페이지)
__2.3.10 운영체제 캐시(페이지 캐시)
__2.3.11 압축
__2.3.12 암호화
2.4 메모리 스토리지 엔진
__2.4.1 Percona MongoDB의 메모리 스토리지 엔진 설정
__2.4.2 Percona 메모리 스토리지 엔진의 특성
2.5 기타 스토리지 엔진
▣ 03장: 복제
3.1 복제란?
__3.1.1 컨센서스 알고리즘(Consensus Algorithm)
__3.1.2 복제의 목적
3.2 레플리카 셋 멤버
__3.2.1 프라이머리(Primary)
__3.2.2 세컨드리(Secondary)
__3.2.3 아비터(Arbiter)
3.3 프라이머리 선출(Primary Election)
__3.3.1 프라이머리 텀(Primary Term)
__3.3.2 프라이머리 스텝 다운(Primary Step Down)
__3.3.3 프라이머리 선출 시나리오
__3.3.4 프라이머리 선출 시 정족수(Quorum)의 의미
__3.3.5 롤백(Rollback)
__3.3.6 롤백(Rollback) 데이터 재처리
3.4 복제 아키텍처
__3.4.1 복제 로그(OpLog) 구조
__3.4.2 local 데이터베이스
__3.4.3 초기 동기화(Initial Sync)
__3.4.4 실시간 복제(Replication)
3.5 복제 로그(Operation Log) 설정
__3.5.1 OpLog 컬렉션 크기 설정
__3.5.2 복제 동기화 상태 확인
__3.5.3 OpLog 컬렉션과 백업
3.6 레플리카 셋 설정
__3.6.1 하트비트(Heartbeat) 메시지 주기와 프라이머리 선출 타임아웃
__3.6.2 레플리카 셋 멤버 설정
3.7 레플리카 셋 배포
__3.7.1 레플리카 셋 멤버의 수
__3.7.2 DR(Disaster Recovery) 구성
__3.7.3 레플리카 셋 배포 시 주의 사항
▣ 04장: 샤딩
4.1 샤딩(Sharding)이란?
__4.1.1 샤딩의 필요성
__4.1.2 샤딩의 종류
4.2 MongoDB 샤딩 아키텍처
__4.2.1 샤드 클러스터(Sharded Cluster) 컴포넌트
__4.2.2 샤드 클러스터의 쿼리 수행 절차(라우터와 컨피그 서버의 통신)
__4.2.3 컨피그 서버
__4.2.4 컨피그 서버의 복제 방식
__4.2.5 컨피그 서버 가용성과 쿼리 실행
__4.2.6 라우터(mongos)
__4.2.7 라우터의 쿼리 분산
__4.2.8 라우터 배포
__4.2.9 컨넥션 풀 관리
__4.2.10 백업 복구 시 주의 사항
4.3 샤딩 알고리즘
__4.3.1 청크(Chunk)
__4.3.2 레인지 샤딩(Range Sharding)
__4.3.3 해시 샤딩(Hashed Sharding)
__4.3.4 지역 기반 샤딩(Zone Sharding)
__4.3.5 샤드 키
4.4 프라이머리 샤드
4.5 청크 밸런싱
__4.5.1 샤드 클러스터 밸런서
__4.5.2 청크 스플릿(Chunk split)
__4.5.3 청크 머지(Chunk merge)
__4.5.4 청크 이동(Chunk migration)
__4.5.5 청크 사이즈 변경
__4.5.6 점보 청크(Jumbo Chunk)
__4.5.7 고아 도큐먼트(Orphaned document) 삭제
4.6 샤딩으로 인한 제약
__4.6.1 트랜잭션
__4.6.2 샤딩과 유니크 인덱스
__4.6.3 조인과 그래프 쿼리
__4.6.4 기존 컬렉션에 샤딩 적용
▣ 05장: 인덱스
5.1 디스크 읽기 방식
__5.1.1 디스크 저장 매체
__5.1.2 랜덤 I/O와 순차 I/O
5.2 인덱스란?
5.3 MongoDB 인덱스의 개요
__5.3.1 클러스터링 인덱스
__5.3.2 인덱스 내부
__5.3.3 로컬 인덱스(Local Index)
__5.3.4 인덱스 키 엔트리 자료 구조
5.4 B-Tree 인덱스
__5.4.1 구조 및 특성
__5.4.2 B-Tree 인덱스 키 추가 및 삭제
__5.4.3 B-Tree 인덱스 사용에 영향을 미치는 요소
__5.4.4 B-Tree 인덱스를 통한 데이터 읽기
__5.4.5 컴파운드 인덱스(Compound Index)
__5.4.6 B-Tree 인덱스의 정렬 및 스캔 방향
__5.4.7 B-Tree 인덱스의 가용성과 효율성
5.5 해시(Hash) 인덱스
__5.5.1 해시 인덱스의 구조 및 특성
__5.5.2 해시 인덱스의 가용성 및 효율성
__5.5.3 MongoDB 해시 인덱스의 구조 및 특성
__5.5.4 MongoDB 해시 인덱스의 제한 사항
5.6 멀티 키 인덱스
__5.6.1 멀티 키 인덱스의 주의 사항
__5.6.2 멀티 키 인덱스의 성능
__5.6.3 멀티 키 인덱스의 제한 사항
5.7 전문 검색 인덱스
__5.7.1 형태소 분석 알고리즘
__5.7.2 N-Gram 알고리즘
__5.7.3 형태소 분석과 N-Gram의 장단점
__5.7.4 전문 검색 인덱스의 활용
__5.7.5 부정 비교와 문장 검색
__5.7.6 MongoDB 전문 검색 인덱스의 버전 호환성
__5.7.7 전문 검색 인덱스의 제약 사항
5.8 공간 검색 인덱스
__5.8.1 GeoHash 알고리즘
__5.8.2 S2 Geometry 알고리즘
__5.8.3 MongoDB의 공간 인덱스
__5.8.4 MongoDB의 컴파운드 공간 인덱스
5.9 인덱스 속성
__5.9.1 프라이머리 키와 세컨드리 인덱스
__5.9.2 유니크 인덱스
__5.9.3 Partial 인덱스와 Sparse 인덱스
__5.9.4 TTL 인덱스
__5.9.5 인덱스 콜레이션(대소문자 구분 설정)
__5.9.6 외래 키
▣ 06장: 잠금과 트랜잭션
6.1 잠금
__6.1.1 MongoDB 엔진의 잠금
__6.1.2 WiredTiger 스토리지 엔진의 잠금
__6.1.3 잠금 Yield
__6.1.4 잠금 진단
6.2 트랜잭션
__6.2.1 쓰기 충돌(Write Conflict)
__6.2.2 단일 도큐먼트 트랜잭션(Single Document transaction)
__6.2.3 문장의 트랜잭션(Statement transaction) 처리
6.3 격리 수준
__6.3.1 READ-COMMITTED
__6.3.2 SNAPSHOT(REPEATABLE-READ)
__6.3.3 MongoDB 서버의 격리 수준
__6.3.4 MongoDB 서버의 격리 수준과 정렬
6.4 Read & Write Concern과 Read Preference
__6.4.1 Write Concern
__6.4.2 Read Concern
__6.4.3 Read Preference
__6.4.4 maxStalenessSeconds 설정
__6.4.5 샤딩 환경의 중복 도큐먼트 처리
▣ 07장: 데이터 모델링
7.1 데이터베이스와 컬렉션
__7.1.1 네임스페이스
__7.1.2 데이터베이스
__7.1.3 컬렉션
__7.1.4 뷰(View)
__7.1.5 BSON 도큐먼트
__7.1.6 제한 사항
7.2 데이터 타입
__7.2.1 데이터 타입 비교
__7.2.2 필드 값의 비교 및 정렬
__7.2.3 문자셋과 콜레이션
__7.2.4 MongoDB 확장 JSON(Extended JSON)
7.3 모델링 고려 사항
__7.3.1 도큐먼트의 크기
__7.3.2 정규화와 역정규화(Document Referencing vs. Embedding)
__7.3.3 서브 도큐먼트(Sub Document)
__7.3.4 배열(Array)
__7.3.5 필드 이름
__7.3.6 프레그멘테이션(Fragmentation)과 패딩(Padding)
__7.3.7 도큐먼트 유효성 체크
__7.3.8 조인
▣ 08장: 쿼리 개발과 튜닝
8.1 기본 CRUD 쿼리
__8.1.1 쿼리 작성
8.2 확장 검색 쿼리
__8.2.1 맵리듀스(Map Reduce)
__8.2.2 Aggregation
__8.2.3 Fulltext Search
__8.2.4 공간 검색
8.3 스키마 변경(DDL)
__8.3.1 데이터베이스 관리
__8.3.2 컬렉션 관리
__8.3.3 인덱스 관리
▣ 09장: 실행 계획 및 쿼리 최적화
9.1 실행 계획
__9.1.1 쿼리의 처리 과정
__9.1.2 실행 계획 수립
__9.1.3 옵티마이저 옵션
__9.1.4 플랜 캐시
__9.1.5 실행 계획 스테이지
__9.1.6 쿼리 실행 계획 해석
9.2 쿼리 최적화
__9.2.1 실행 계획의 쿼리 튜닝 포인트
__9.2.2 슬로우 쿼리 로그 분석 및 튜닝
__9.2.3 쿼리 프로파일링
__9.2.4 인덱스 힌트
▣ 10장: 보****
10.1 인증(Authentication)
__10.1.1 내부 인증
__10.1.2 사용자 인증
10.2 권한(Authorization)
__10.2.1 액션(Action)
__10.2.2 내장(Built-in)된 역할(Role)
__10.2.3 사용자 정의 역할(Role)
10.3 암호화(Encryption)
__10.3.1 데이터 암호화 방식
__10.3.2 MongoDB TDE 구현
▣ 부록: 백업 및 복구
A.1 mongodump와 mongorestore를 이용한 논리 백업 및 복구
__A.1.1 백업
__A.1.2 복구
A.2 물리 백업 및 복구
__A.2.1 셧다운 상태의 백업
__A.2.2 복제 중지 상태의 백업
__A.2.3 파일시스템 스냅샷 백업
__A.2.4 Percona 온라인 백업
__A.2.5 물리 백업 복구
A.3 PIT(Point-In-Time) 복구