[데이터 중심 애플리케이션 설계] 2장. 데이터 모델과 질의 언어
2장. 데이터 모델과 질의 언어
2장의 핵심 내용
- 다양한 범용 데이터 모델 : 관계형 모델 & 문서 모델 & 그래프 기반 데이터 모델
- 각 데이터 모델 질의 언어 및 사용 사례
관계형 모델과 문서 모델
RDBMS : 관계 + 튜플. 지금까지 가장 보편적인 데이터 처리 기술
객체 지향 프로그래밍 언어와 RDB 모델 간의 간극 : 임피던스 불일치
데이터를 위한 질의 언어
선언형과 명령형
- 선언형 : 목표를 달성하기 위한 방법이 아닌 알고자 하는 데이터의 패턴(정렬, 그룹화,집계) 지정하는 방식. 질의 실행 계획은 옵티마이저가 결정.
- 내부 작동 방식 몰라도 간결, 쉽게 작업 가능
- 순서 변경되어도 영향 없음.
- 때때로 병렬 진행에 적합
- 명령형
- 특정 순서, 특정 연산을 직접 지정. -> 개발자가 피곤해짐 ㅜ
맵리듀스 질의
맵리듀스 : 많은 컴퓨터에서 대량의 ㅈ데이터를 처리하기 위한 프로그래밍 모델
선언형과 명령형의 그 중간
map과 reduce 함수 기반
몽고 DB
몽고 DB의 .mapReduce()
// T.B.D
db.observations.mapReduce(
function map() {
var year ...
},
function reduce(key, value) {
...
}
)
몽고 DB mapReduce 제약사항
mpa, reduce 함수 모두 순수 함수이어야 한다. 즉, 입력으로 전달된 데이터만 사용.
몽고DB는 mapReduce의 사용성의 문제를 해결하기 위해 aggregation pipeline
을 지원.
그래프형 데이터 모델
다대다 관계. 데이터간 연결이 복잡한 경우 적합한 모델링. 정점 (vertex, node, entity)과 간선 (edge, relation, arc)로 구성된 모델링.
모델 2 종류
1) 속성 그래프 모델
정점
구성 요소- 고유한 식별자
- 유출 간선 집합
- 유입 간선 집합
- 속성 컬렉션(key-value 쌍)
간선
구성 요소- 고유한 식별자
- 간선이 시작하는 정점(꼬리정점)
- 간선이 끝나는 정점(머리 정점)
- 두 정점 간 관계 유형을 설명하는 레이블
- 속성 컬렉션(key-value 쌍)
- 관계형 스키마 사용 속성 그래프 표현
CREATE TABLE vertices ( -- ...T.B.D )
- 사이퍼 질의 언어 사용
속성 그래프 모델의 중요한 점
- 정점의 다른 정점과 간선으로 연결. 특정 유형과 관련 여부를 제한하는 스키마는 없다.
- 정점이 주어지면 정점의 유입과 유출 간선을 효율적으로 찾을 수 있고 그래프를 순회할 수 있다. 즉 일련의 정점을 따라 앞뒤 방향으로 순회
- 다른 유형의 관계에 서로 다른 레이블을 사용하면 단일 그래프에 다른 유형의 정보를 저장하면서도 데이터 모델을 깔끔하게 유지 가능
2) 트리플 저장소 모델
속성 그래프 모델과 거의 동등. 다만, 다른 용어를 사용.
세 가지 구성
- 주어(subject), 서술어(predicate), 목적어(object)
- 주어
- 그래프 모델의 정점과 동일
- 서술어
- 목적어 : 두 종류
- 문자열이나 숫자 같은 원시 값 : 트리플의 서술어와 목적어는 주어 정점에서 속성의 키, 값과 동일 eg) (lucy,age,33) == {“age”: 33} 속성을 가진 정점 lucy와 동일
- 그래프의 다른 정점 : 서술어는 그래프의 간선, 주어는 꼬리 정점, 목적어는 머리 정점 eg) (lucy, married-with, alang) === lucy, alang은 모두 정점. married-with는 두 정점을 잇는 간선의 레이블
Turtle/Notation3(N3) 형식 등을 사용. RDF(Resource Description Framework) 데이터 모델을 통해 표현하기도.
질의 언어 3 종류
1) 사이퍼 Cypher
속성 그래프
를 위한 선언형 질의 언어 Neo4j 그래프 DB용으로 만들어짐
SQL에서도 그래프 데이터 질의가 가능하나, 어려움. Why? 여러 간선을 순회해야 하기 때문에 미리 조인 수를 고정할 수 없음
재귀 공통 테이블 식
(recursive common table expression) : SQL:1999 이후 가변 순회 경로에 대한 질의 개념 도입.(PostgreSQL, IBM DB2, Orcle, SQL server에서 지원)
사이퍼와 비교했을 때 질의어가 너무 길어지고 복잡해짐.
2) 스파클 SPARQL (SPARQL Protocol and RDF Query Language)
RDF 데이터 모델을 사용한
트리플 저상소
질의 언어
속성과 간선을 구별하지 않고 서술어만 사용 -> 속성 매칭을 위해 동일 구문 사용 가능.
3) 데이터로그 Datalog
스파클, 사이퍼보다 오래된 언어.
질의 언어의 기반이 되는 초석 제공
- (주어, 서술어, 목적어) 대신 서술어(주어, 목적어)로 작성된 데이터 모델 질의.
- 사이퍼, 스파클과 달리
단계
를 나눠 조금씩 질의 해나감.- 새로운 서술어를 데이터베이스에 전달하는 규칙 정의
- 정의한 규칙을 다른 질의의 규칙에 결합, 재사용 가능
- 복잡한 데이터에 효과적