[데이터 중심 애플리케이션 설계] 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

스파클, 사이퍼보다 오래된 언어.
질의 언어의 기반이 되는 초석 제공

  • (주어, 서술어, 목적어) 대신 서술어(주어, 목적어)로 작성된 데이터 모델 질의.
  • 사이퍼, 스파클과 달리 단계를 나눠 조금씩 질의 해나감.
    • 새로운 서술어를 데이터베이스에 전달하는 규칙 정의
    • 정의한 규칙을 다른 질의의 규칙에 결합, 재사용 가능
  • 복잡한 데이터에 효과적