- 로그 구조 저장소: 쓰기에 좋은 구조
- LSM 트리: SS 테이블을 여러개로 구성된 인덱스 구조
- SS 테이블: merge sort 방식으로 순차적으로 쌓인 키를 컴팩션 시 정렬하여 저장
- 순차적으로 write하기 때문에 속도가 빠르다.
- 페이지를 사용하지 않아 오버헤드가 적어 압축률이 좋다.
- 컴팩션 과정이 있기 때문에 성능에 영향을 줄 수가 있다.
- LSM 트리: SS 테이블을 여러개로 구성된 인덱스 구조
- 페이지 지향 저장소: 읽기에 좋은 구조
- B 트리: 고정 크기의 블록이나 페이지로 나누고 한 페이지에서 다음 페이지를 참조한다.
- B 트리의 쓰기는 디스크 상의 페이지를 덮어쓴다.
- 이것은 문제 발생 시 위험한 동작으로 WAL(Write-ahead log)를 추가해서 문제 발생 이후에도 복구가 가능하도록 한다. (copy-on-write scheme 방식도 있음)
- WAL과 실제 트리에 2번 써야 하는 단점이 생기고, 페이지 일부가 변경되도 전체 페이지를 기록해야 한다.
- B 트리: 고정 크기의 블록이나 페이지로 나누고 한 페이지에서 다음 페이지를 참조한다.
- 색인(Index) 구조
- 색인의 값은 실제 row거나 참조이다. 일반적으론 heap을 참조한다.
- clusted index는 실제 row를 저장하는 방식
- covering index는 index에 테이블 컬럼의 일부를 저장
- concatenated index는 여러 컬럼 순서쌍으로 저장
- 인메모리
- 일반적으로 디스크가 아닌 메모리에 데이터를 저장하고 있기 때문에 성능이 빠르다고 한다.
- 메모리가 충분히 크다면 일반적인 데이터베이스도 메모리에서 동작하기 때문에 성능이 빠를 수 있고, 오히려 오버헤드도 적다.
- 디스크 기반 색인으로 구현하기 어려운 데이터 모델을 제공
- redis에선 우선순위 큐나 셋 같은 구조를 제공
- 인메모리 데이터베이스도 디스크를 사용하기도 한다.
- swap 처럼 최근 사용하지 않는 데이터를 디스크에 내린다.
- 비휘발성을 위해 데이터를 디스크에 저장하고 있다.
- 일반적으로 디스크가 아닌 메모리에 데이터를 저장하고 있기 때문에 성능이 빠르다고 한다.
- 트랜젝션
- 사실 ACID가 필수 아님
- OLTP: 적은 수의 레코드를 키 기반으로 가져옴
- OLAP: 많은 레코드를 집계함
- 컬럼 지향 저장소: 주로 분석용에서는 많은 로우를 사용하고 많은 컬럼 중 일부만 사용하기 때문에 로우 기반이 아닌 컬럼 기반이 효율적이다.
- 컬럼 압축 가능 (비트맵 부호화)
- 컬럼 패밀리는 컬럼 압축을 사용하지 않고 로우 지향적이다.
- 데이터 집계: 분석용에서는 집계를 많이 사용하게 된다.
- 구체화 뷰(materialized view)는 이런 집계를 만드는 쿼리를 미리 실행 시켜 저장한다. (일반적인 뷰는 가상(virtual) 뷰라 실제로 값을 저장하고 있진 않는다.)
- 데이터 큐브: 여러 컬럼들을 다양한 차원으로 그룹화한 집계 테이블을 저장하고 있다. → 일부 값만 가져오는 집계는 커버하지 못 한다.
'Studying > Data System Design' 카테고리의 다른 글
파티셔닝 [데이터 중심 애플리케이션 설계 6장] (0) | 2023.07.13 |
---|---|
복제 [데이터 중심 애플리케이션 설계 5장] (0) | 2023.07.09 |
부호화와 발전 [데이터 중심 애플리케이션 설계 4장] (0) | 2023.07.08 |
데이터 모델 및 질의 언어 [데이터 중심 애플리케이션 설계 2장] (0) | 2023.06.14 |
신뢰성, 확장성, 유지보수성 [데이터 중심 애플리케이션 설계 1장] (0) | 2023.06.04 |