PE Notes · DB
NoSQL, CAP, BASE, PACELC
분산에서 C·A·P를 동시에 못 지키는 CAP, 분단 없을 때의 지연 트레이드오프 PACELC, AP 쪽 BASE와 네 데이터 모델, ACID를 지키는 NewSQL을 한 줄로 잇습니다.
관계형 한 대의 수직 확장과 고정 스키마가 웹 규모에서 먼저 지칩니다. 은 SQL만 버리는 이름이 아니라, 분산과 유연 모델을 택합니다. 그 대가는 즉시 일관성입니다.
CAP과 PACELC
은 일관성(C)·가용성(A)·분단 내성(P)을 한꺼번에 못 지킨다고 말합니다. 네트워크 분단은 분산에서 가정하므로, 실제 선택은 CP와 AP입니다. 는 분단이 없을 때도 지연(L)과 일관성(C)을 고른다고 보탭니다.
| 선택 | 예시 | 한 줄 |
|---|---|---|
| CP | HBase, ZooKeeper | 분단 때 응답을 거절해 값을 맞춘다 |
| AP | Cassandra, DynamoDB | 응답은 하되 잠시 엇갈릴 수 있다 |
는 Basically Available, Soft State, Eventually Consistent입니다. ACID의 즉시 일관성 대신, 시간이 지나면 복제가 따라옵니다.
네 모델
키-값은 세션·캐시, 문서는 JSON 프로필, 컬럼패밀리는 시계열, 그래프는 관계 탐색입니다. 설계는 정규화보다 어떤 읽기를 몇 밀리초에 끝낼지가 먼저입니다.
| 유형 | 모양 | 대표 |
|---|---|---|
| Key-Value | 키와 불투명 값 | Redis, DynamoDB |
| Document | JSON 문서 | MongoDB |
| Column-Family | 행 키와 컬럼 패밀리 | Cassandra, HBase |
| Graph | 노드·엣지 | Neo4j |
파티션 키는 핫스팟을 피해야 하고, 임베딩은 같이 읽는 작은 값, 참조는 자주 바뀌는 큰 값입니다.
NewSQL
은 SQL과 ACID를 유지한 채 수평 확장을 노립니다. Spanner, CockroachDB, TiDB가 이 칸입니다. RDB의 익숙함과 NoSQL의 규모 사이를 표로 적습니다.
| 비교축 | RDBMS | NoSQL | NewSQL |
|---|---|---|---|
| 확장 | 수직 | 수평 | 수평 |
| ACID | 강 | 제한 | 분산 ACID |
| SQL | 있음 | 제한 | 있음 |