NoSQL 철저 입문
NoSQL 탄생 배경, 다양한 유형의 NoSQL 비교 분석, 효과적으로 설계하는 노하우까지 사례 연구로 설명한다
《NoSQL 철저 입문》은 데이터베이스 개발자와 설계자를 위한 책이다.
이 책은 관계형 데이터베이스를 NoSQL로 대체해야 한다고 주장하지 않는다. 왜 NoSQL이 탄생하게 되었는지, 어떤 점이 NoSQL의 강점인지 설명한다. 그리고 관계형 데이터베이스는 여전히 필요하지만, 엄청난 양의 데이터를 좀 더 효율적으로 저장하고 관리하기 위해 NoSQL의 도움이 필요하다고 이야기한다.
HBase, 카산드라, 몽고DB, Neo4j, 레디스 등 유명한 NoSQL 데이터베이스는 많다. 하지만 어떤 것이 각자의 애플리케이션에 가장 적합한 모델인지 제대로 아는 사람은 적다. 이 책은 NoSQL 데이터베이스 세상을 제대로 알고자 하는 개발자와 설계자를 위해 쓰였다. 다양한 NoSQL 데이터베이스를 구조와 특성에 따라 네 가지 유형으로 나누고 각 유형을 비교하며 장단점을 알아본다. 또한, 현업에서 부딪힌 어려움을 어떻게 해결해야 할지, 효과적으로 설계하는 팁도 사례 연구를 통해 설명한다. 《NoSQL 철저 입문》으로 NoSQL 세상을 이해하고 최적의 NoSQL을 선택하자.
«NoSQL 철저 입문»은 제2부 ~ 제3부(3장~8장)까지 공개합니다.
전자책 구입
목차
- 제1부 | NoSQL 데이터베이스 개요
- 1장. 요구 사항에 따른 데이터베이스의 종류
- 1.1 관계형 데이터베이스 설계
- 전자 상거래 애플리케이션
- 1.2 초기 데이터베이스 관리 시스템
- 플랫 파일 데이터 관리 시스템
- 계층형 데이터 모델 시스템
- 네트워크 데이터 관리 시스템
- 초기 데이터 관리 시스템 요약
- 1.3 관계형 데이터베이스의 혁명
- 관계형 데이터베이스 관리 시스템
- SQL 데이터 조작 언어
- 1.4 NoSQL 데이터베이스의 출현 배경
- 확장성
- 비용
- 유연성
- 가용성
- 1.5 요약
- 1.6 사례 연구
- 1.7 참고자료
- 1.8 참고문헌
- 연습문제
- 2장. 다양한 NoSQL 데이터베이스
- 2.1 분산 데이터베이스에서의 데이터 관리
- 영구적인 데이터 저장
- 데이터 일관성 유지
- 데이터 가용성 확보
- 응답 시간•일관성•지속성 간의 균형 맞추기
- CAP 이론: 일관성, 가용성, 그리고 파티셔닝
- 2.2 ACID와 BASE
- ACID: 원자성, 일관성, 고립성, 지속성
- BASE: 기본적인 가용성, 소프트 상태, 결과적 일관성
- 결과적 일관성의 유형
- 2.3 NoSQL 데이터베이스의 네 가지 유형
- 키-값 데이터베이스
- 문서 데이터베이스
- 컬럼 패밀리 데이터베이스
- 그래프 데이터베이스
- 2.4 요약
- 2.5 참고자료
- 2.6 참고문헌
- 연습문제
- 제2부 | 키-값 데이터베이스
- 3장. 키-값 데이터베이스 소개
- 3.1 배열에서 키-값 데이터베이스까지
- 배열: 보조 바퀴를 단 키-값 저장 구조
- 연관 배열: 보조 바퀴를 떼어버리자
- 캐시: 자전거에 기어를 달자
- 메모리와 디스크 키-값 데이터베이스: 자전거에서 오토바이로
- 3.2 키-값 데이터베이스의 핵심 특징
- 단순성: 복잡한 데이터 모델이 필요한 사람은 없다
- 속도: 빠를수록 좋다
- 확장성: 빠른 속도를 유지하라
- 3.3 키: 의미 없는 값을 가진 식별자, 그 이상인 존재
- 키 생성 방법
- 키를 사용해 값을 가져오기
- 3.4 값: 원하면 어떤 데이터든지 저장한다
- 값은 엄격한 데이터 타입을 요구하지 않는다
- 값 검색의 한계
- 3.5 요약
- 3.6 참고자료
- 3.7 참고문헌
- 연습문제
- 4장. 키-값 데이터베이스 용어 정리
- 4.1 키-값 데이터베이스 데이터 모델링 용어
- 키
- 값
- 이름공간
- 파티션
- 파티션 키
- 스키마리스(스키마가 없는 데이터구조)
- 4.2 키-값 아키텍처 용어
- 클러스터
- 링
- 복제
- 4.3 키-값 데이터베이스 구현에 관한 용어
- 해시 함수
- 해시 충돌
- 압축
- 4.4 요약
- 4.5 참고자료
- 연습문제
- 5장. 키-값 데이터베이스 설계
- 5.1 키 설계와 파티셔닝
- 키는 명명규칙을 따라야 한다
- 잘 설계된 키는 코드의 양을 줄여준다
- 값의 범위 처리
- 구현 상 제약을 고려해 키를 만들어야 한다
- 파티셔닝에서 키를 어떻게 사용할까?
- 5.2 구조화된 값 설계
- 구조화된 데이터 유형은 대기 시간을 줄이는 데 도움이 된다
- 값이 크면 읽기와 쓰기 연산이 비효율적일 수 있다
- 5.3 키-값 데이터베이스의 한계
- 키만으로 값 조회하기
- 범위 질의를 지원하지 않는 키-값 데이터베이스
- 관계형 데이터베이스의 SQL과 필적할 만한 표준 질의 언어의 부재
- 5.4 키-값 데이터베이스를 위한 설계 패턴
- TTL 키
- 테이블 모방
- 집계
- 원자적 집계
- 열거형 키
- 인덱스
- 5.5 요약
- 5.6 사례 연구: 모바일 애플리케이션을 위한 키-값 데이터베이스 구성
- 5.7 참고자료
- 연습문제
- 제3부 | 문서 데이터베이스
- 6장. 문서 데이터베이스 소개
- 6.1 문서란 무엇인가
- 문서란 그리 간단한 것이 아니다
- 문서와 키-값 쌍
- 컬렉션에서 여러 문서 관리하기
- 6.2 명시적으로 스키마를 정의하지 말자
- 6.3 문서 데이터베이스의 기본 연산 작업
- 컬렉션에 문서 삽입하기
- 컬렉션에 있는 문서 삭제하기
- 컬렉션에 있는 문서 갱신하기
- 컬렉션에서 문서 조회하기
- 6.4 요약
- 6.5 참고자료
- 연습문제
- 7장. 문서 데이터베이스 용어 정리
- 7.1 문서와 컬렉션 용어
- 문서
- 컬렉션
- 중첩 문서
- 스키마리스
- 다형적 스키마
- 7.2 파티션 유형
- 수직 파티셔닝
- 수평 파티셔닝과 샤딩
- 7.3 데이터 모델링과 질의 처리
- 정규화
- 비정규화
- 질의 프로세서
- 7.4 요약
- 7.5 참고자료
- 연습문제
- 8장. 문서 데이터베이스 설계
- 8.1 정규화와 비정규화, 둘 간에 균형을 맞춘 검색
- 일대다 관계
- 다대다 관계
- 조인의 필요성
- 조인: 관계형 데이터베이스가 짊어진 무거운 짐
- 문서 데이터베이스 모델러는 무엇을 해야 할까?
- 8.2 가변적인 문서 처리 계획
- 너무 커진 문서의 이동 회피
- 8.3 인덱스의 골디락스 존
- 읽기 부하가 큰 애플리케이션
- 쓰기 부하가 큰 애플리케이션
- 8.4 공통 관계 모델링
- 문서 데이터베이스에서 일대다 관계
- 문서 데이터베이스에서 다대다 관계
- 문서 데이터베이스의 계층 관계 모델링
- 8.5 요약
- 8.6 사례 연구: 고객 적하 목록
- 중첩할 것인가? 중첩하지 않을 것인가?
- 인덱스 선택
- 유형별로 컬렉션을 분리해야 할까?
- 8.7 참고자료
- 연습문제
- 제4부 | 컬럼 패밀리 데이터베이스
- 9장. 컬럼 패밀리 데이터베이스 소개
- 9.1 태초에 구글의 빅테이블이 있었다
- 컬럼을 동적으로 제어하기
- 로우, 컬럼 이름, 타임스탬프에 의한 인덱싱
- 데이터의 저장 위치 제어
- 원자적으로 처리되는 로우의 읽기와 쓰기
- 정렬 순서대로 로우 관리하기
- 9.2 키-값 데이터베이스와 문서 데이터베이스의 차이점과 유사점
- 컬럼 패밀리 데이터베이스의 특징
- 컬럼 패밀리 데이터베이스와 문서 데이터베이스 간의 유사점과 차이점
- 컬럼 패밀리 데이터베이스 대 관계형 데이터베이스
- 9.3 컬럼 패밀리 데이터베이스에서 사용되는 아키텍처
- HBase 아키텍처: 다양한 유형의 노드
- 카산드라 아키텍처: P2P(Peer-to-Peer)
- 용어 살펴보기: 가십 프로토콜
- 열역학과 분산 데이터베이스: 안티-엔트로피가 필요한 이유
- 이것 좀 들고 있어요: 힌트 핸드오프
- 9.4 어떤 경우에 컬럼 패밀리 데이터베이스를 사용하면 좋은가?
- 9.5 요약
- 9.6 참고자료
- 연습문제
- 10장. 컬럼 패밀리 데이터베이스 용어 정리
- 10.1 컬럼 패밀리 데이터베이스의 기본 구성 요소
- 키스페이스
- 로우 키
- 컬럼
- 컬럼 패밀리
- 10.2 구조와 프로세스: 컬럼 패밀리 데이터베이스 구현
- 컬럼 패밀리 데이터베이스의 내부 데이터 구조와 구성 매개변수
- 옛 친구: 클러스터와 파티션
- 내부 살펴보기: 또 다른 컬럼 패밀리 데이터베이스 구성 요소
- 10.3 프로세스와 프로토콜
- 복제
- 안티-엔트로피
- 가십 프로토콜
- 힌트 핸드오프
- 10.4 요약
- 10.5 참고자료
- 연습문제
- 11장. 컬럼 패밀리 데이터베이스 설계
- 11.1 테이블 설계 지침
- 조인 대신 비정규화
- 값이 없는 컬럼 사용하기
- 컬럼 이름과 컬럼 값을 사용해 데이터 저장하기
- 단일 로우를 이용한 엔터티 모델
- 로우 키에서 핫스팟 회피
- 적당한 수의 컬럼 값 버전 유지
- 컬럼 값에서 복잡한 데이터 구조 회피
- 11.2 인덱스 구성 지침
- 컬럼 패밀리 데이터베이스가 관리하는 보조 인덱스는 언제 사용하면 좋을까?
- 테이블을 이용한 보조 인덱스 생성과 관리
- 11.3 빅데이터를 다루기 위한 도구
- 빅데이터의 추출, 가공, 적재
- 빅데이터 분석
- 빅데이터 모니터링 도구
- 11.4 요약
- 11.5 사례 연구: 고객 데이터 분석
- 사용자 요구 사항 파악
- 11.6 참고자료
- 연습문제
- 제5부 | 그래프 데이터베이스
- 12장. 그래프 데이터베이스 소개
- 12.1 그래프란 무엇인가?
- 12.2 그래프와 네트워크 모델링
- 지리적 위치 모델링
- 전염병 모델링
- 추상적이고 구체적인 엔터티 모델링
- 소셜 미디어 모델링
- 12.3 그래프 데이터베이스의 장점
- 조인을 피하면 더 빠른 질의가 가능하다
- 단순화한 모델링
- 엔터티 간의 여러 관계
- 12.4 요약
- 12.5 참고자료
- 연습문제
- 13장. 그래프 데이터베이스 용어 정리
- 13.1 그래프의 구성 요소
- 정점
- 에지
- 경로
- 루프
- 13.2 그래프에서의 연산 작업
- 그래프의 합집합
- 그래프의 교집합
- 그래프의 순회
- 13.3 그래프와 정점의 속성
- 동형성
- 순서와 크기
- 차수
- 근접성
- 매개성
- 13.4 그래프의 유형
- 무방향 그래프와 방향 그래프
- 유동 네트워크
- 이분 그래프
- 다중 그래프
- 가중 그래프
- 13.5 요약
- 13.6 참고자료
- 연습문제
- 14장. 그래프 데이터베이스 설계
- 14.1 그래프 설계 시작하기
- 소셜 네트워크 그래프 데이터베이스의 설계
- 질의를 통한 설계
- 14.2 그래프 질의
- 사이퍼: 선언에 의한 질의
- 그렘린: 그래프 순회에 의한 질의
- 14.3 그래프 데이터베이스 설계 팁과 함정
- 검색 시간 향상을 위한 인덱스 사용하기
- 적절한 유형의 에지 사용하기
- 그래프 순회 시 사이클 감시하기
- 그래프 데이터베이스의 확장성 고려하기
- 14.4 요약
- 14.5 사례 연구: 운송 경로 최적화
- 사용자 요구 사항 파악
- 그래프 분석 솔루션 설계
- 14.6 참고자료
- 연습문제
- 제6부 | 애플리케이션에 맞는 데이터베이스 선택하기
- 15장. 데이터베이스 선택하기
- 15.1 NoSQL 데이터베이스 선택하기
- 키-값 데이터베이스 선택 기준
- 문서 데이터베이스 선택 기준과 사용 사례
- 컬럼 패밀리 데이터베이스 선택 기준과 사용 사례
- 그래프 데이터베이스 선택 기준과 사용 사례
- 15.2 NoSQL 데이터베이스와 관계형 데이터베이스 함께 사용하기
- 15.3 요약
- 15.4 참고자료
- 연습문제
- 제7부 | 부록
- 부록 A. 연습문제 정답
- 부록 B. NoSQL 데이터베이스 목록
- 부록 C. 용어 해설