1. 데이터 중심 애플리케이션 설계가 책의 전체 이름이지만 너무 길어서 데이터 설계로 줄인다.
2. 1장은 기능적 요구사항, 비기능적 요구사항, 신뢰성, 확장성, 유지보수성에 대해서 다룬다. 다른 곳에서 많이 다뤘던 이야기이므로 PASS
데이터 중심 애플리케이션 설계 - 2장, 데이터 모델과 질의 언어
관계형 모델
- 데이터(테이블): 관계와 튜플로 구성
- 비즈니스 데이터 처리 시 유용 ex) 트랜잭션 처리, 일괄 처리
NoSQL: Not Only SQL
- 다중 저장 지속성: 폭넓은 다양성
객체 관계형 불일치
임피던스 불일치(impedance mismatch): 관계형 테이블 저장 시, 애플리케이션 코드와 데이터 베이스 모델 객체 사이 전환 계층
- 객체 관계형 매핑(ORM) 프레임워크를 사용
일대다(one-to-manay) 관계 표현 방법
1. 전통적인 SQL 모델: 외래 키로 users 테이블 참조
2. SQL 표준이 데이터타입과 XML 데이터 지원: 단일 로우에 다중 값을 저장하고 문서 내 질의와 색인 가능
3. JSON이나 XML 문서로 부호화해 데이터베이스의 텍스트 컬럼에 저장한 다음, 애플리케이션이 구조와 내용을 해석 -> SQL 사용 불가
JSON 모델
- 지역성⬆️
- 트리 구조 표현
다대일과 다대다 관계
중복된 데이터 정규화 시, 다대일 관계가 유용
But, 문서 모델에 적합하지 않음
➡️ RDB는 JOIN이 쉽기 때문에 다른 테이블의 ROW를 참조하는 방식
➡️ JOIN이 없으면?
And, 기능을 추가하면서 데이터가 상호연결되면서 복잡해짐
다대다 관계의 표현
네트워크 모델(= CODASYL)
1. 계층 모델 일반화
- 계층 모델의 트리 구조에서 모든 레코드는 하나의 부모를 가짐
2. 접근 경로: 최상위 레코드에서 부터 연속된 연결 경로를 따르는 것이 레코드에 접근하는 유일한 방법
3. 접근 경로를 따라 데이터베이스의 끝에서 끝까지 커서를 움직임
- 레코드가 다중 부모인 경우: 모든 관계 추적
관계형 모델
1. 모든 데이터 배치
- 복잡한 접근 경로가 존재하지 않음
2. 질의 최적화기(query optimizer): 질의의 어느 부분을 어떤 순서로 실행할지 결정하고 사용할 색인을 자동으로 결정
3. 조인, 다대일, 다대다 관계 지원
▶️ 다대일과 다대다 관계 표현: 외래키 / 문서참조
문서 데이터 모델
- (장점)스키마 유연성, 지역성
- 데이터가 문서와 비슷한 구조 시 사용(일대다 관계 트리) -> 데이터를 찢는 관계형 기법은 복잡한 코드를 발생시킴
- 다대다 관계 사용 시, 비정규화로 인해 데이터 일관성을 유지하기 힘듦, 또는 복잡한 조인 사용
- 스키마가 존재하지 않아, 임의의 키와 값을 추가할 수 있음(schema-on-write, schema-on-read)
관계형데이터베이스는 임의의 키와 값 추가 시, Alter 수행
> MySQL의 경우 전체 테이블을 복사하므로 오랜 시간이 걸림
데이터 지역성
저장소 지역성(storage locality)
- 애플리케이션이 자주 전체 문서에 접근해야 할 때 사용
> 관계형데이터베이스 사용 시, 전체 검색을 위해 다중 색인이 필요하여 많은 시간이 소요
- 해당 문서의 많은 부분을 필요로 할 시 적용
But
문서의 작은 부분에만 접근해도 전체 문서를 적재해야 하기 때문에 큰 문서에서는 낭비 일 수 있음
따라서, 문서의 크기에 성능 제한이 있어 문서 데이터베이스 사용이 줄어듦
- (오라클)다중 테이블 색인 클러스터 테이블: 부모 테이블 내에 테이블의 로우를 교차 배치되게끔 선언하는 스키마를 허용하여 관계형 데이터 모델에서 지역성 특성을 동일하게 제공
문서 데이터베이스와 관계형 데이터베이스 통합
- 관계형 데이터베이스에서 XML지원
질의 언어
SQL: 선언형 질의, IMS: 명령형 질의
선언형 질의
- 목표를 달성하기 위한 방법X
- 알고자하는 데이터의 패턴O
장점
- 명령형 API보다 간결하고 쉽게 작업
- 자동 최적화: 데이터베이스 엔진의 상세 구현이 숨겨져 있어 질이릘 변경하지 않고도 성능 향상 가능
- 병렬 실행에 적합
> 명령형 코드는 순서를 지정하기 때문에 병렬 처리가 어려움
- 웹에서의 사용: CSS vs JS
/* CSS */
li.selected > p {
...
}
/* JS */
var liElments = document.getElemnts~
for(var i ~ ) {
...
}
> CSS는 간단하게 선언하여 스타일이 적용 가능한 반면, JS는 반복문을 통해 Elments에 접근해야 함
맵리듀스 질의
- map과 reduce 함수 기반
- 많은 컴퓨터에서 대량의 데이터를 처리하기 위한 프로그래밍 모델
- NoSQL 데이터 저장소에서 제한된 형태의 맵리듀스 지원
- 대량의 문서에서 읽기 전용 질의 수행 시 사용
- 선언형 질의와 명령어 질의의 중간
집계 파이프라인(aggregation pipeline)
몽고DB에서 선언형 질의 언어를 지원하는 것, 연계된 자바스크립트 함수 두 개를 신중히 작성해야 함
- 표현 측면에서는 SQL과 유사하지만, JSON 기반 구문을 사용
참고
https://honeywater97.tistory.com/174
그래프형 데이터 모델
- 정점과 간선 객체로 이루어진 데이터
- 소셜 그래프, 웹 그래프, 도로나 철도 네트워크 등
속성 그래프
- 정점은 다른 정점과 간선으로 연결
- 정점이 주어지면 정점의 유입과 유출 간선을 효율적으로 찾을 수 있음
- 그래프 순회O
- 데이터 모델링을 위한 많은 유연성 제공
사이퍼 질의 언어
- 속성 그래프를 위한 선언형 질의 언어
> SQL을 이용하여 재귀 공통 테이블식(WITH RECURISVE)를 이용해 표현 할 수 있음
트리플 저장소 모델
- 속성 그래프 모델과 거의 동등
- 모든 정보를 주어, 서술어, 목적어로 간단한 세 부분 구문 형식으로 저장
목적어
- 문자열이나 숫자 같은 원시 데이터타입 값
- 그래프의 다른 정점
스파클 질의 언어
- 트리플 저장소 질의 언어, RDF 데이터 모델 사용
데이터로그
- 질의 언어의 기반이 되는 초석 제공
- 서술어(주어, 목적어)로 작성
데이터의 세가지 모델: 문서, 관계형, 그래프
- NoSQL: 문서, 그래프
'IT > 책' 카테고리의 다른 글
[데이터설계] 3장, 저장소와 검색 - 트랜잭션 (0) | 2022.08.21 |
---|---|
[데이터설계] 3장, 저장소와 검색 (0) | 2022.08.18 |
[코딩인터뷰] 자료구조 - 배열과 문자열 해법 (0) | 2022.01.30 |
[코딩 인터뷰] 자료 구조 (0) | 2022.01.16 |
[Clean Architecture] 1달1권, 두번째 책 후기 (0) | 2022.01.07 |