02장: 데이터 모델과 질의 언어

데이터 시스템의 기초

02장: 데이터 모델과 질의 언어

대부분의 애플리케이션은 하나의 데이터 모델 위에 다른 데이터 모델을 계층을 둬서 만듬

관계형 모델과 문서 모델

가장 잘알려진 데이터 모델은 1970년 에드가 코드가 제안한 관계형 모델을 기반으로 한 SQL

데이터는 관계로(테이블) 구성되고 각 관계는 튜플(로우) 모음

  • NoSQL의 탄생 : 관계형 모델의 우위를 뒤집으려는 가장 최신 시도

    • 가까운 미래에는 관계형 데이터 베이스와 비관계형 데이터스토어와 함께 사용될 것이다. - 이미 사용중
  • 객체 관계형 불일치

    • 임피던스 불일치
  • 다대일과 다대다 관계

    • 쓰기 오버해드 불일치
    • 중복된 데이터를 정규화 하려면 다대일 관계
  • 문서 데이터베이스는 역사를 반복하고 있나?

    • 관계형 모델
      • 모든 데이터를 배치하는것
    • 네트워크 모델
      • 코다실 모델 : 코다실이라고 부르는 위원회에서 표준화됨
      • 레코드간의 연결은 외래 키 보다 포인터와 더 비슷하다
      • 레코드에 접근하는 유일한 방법은 최상위 레코드에서 부터 연속된 연결 경로를 따르는 방법 - 접근경로
    • 문서 데이터베이스와의 비교
      • 한 가지 측면에서 계층 모델로 되돌아갔다
      • 별도 테이블이 아닌 상위 레코드 내에 중첩된 레코드를 저장한다
  • 관계형 데이터베이스와 오늘날의 문서 데이터베이스

    • 내결함성과 동시성처리를 포함 고려해야할 차이점이 많이 있다.
    • 애플리케이션 데이터가 문서와 비슷한 구조라면 문서 모델을 사용하는게 좋다
    • 사딩은 관계형 기법은 다루기 힘든 스키마와 불필요하게 복잡한 애플리케이션 코드를 발생시킴
    • 애플리케이션에서 다대다 관계를 사용한다면 문서 모델은 매력이 떨어진다
    • 문서 데이터 베이스는 암묵적인 스키마가 있지만 강요하지 않는다

데이터를 위한 질의 언어

SQL은 선언형 질의 언어

IMS와 코다실은 명령형 코드

  • 웹에서의 선언형 질의
    • CSS selector
    • DOM
  • 맵리듀스 질의
    • map 과 reduce 함수를 기반
      • map 함수는 각 입력 데이터를 독립적으로 처리
      • reduce 함수는 map 함수의 출력을 하나로 합침

그래프형 데이터 모델

다대다 관계가 일반적일때는 그래프로 데이터를 모델링하기 시작하는 편이 더 좋다

정점 vertex : 노드나 엔티티
간선 edge : 관계나 호(arc)

페이지 랭크

  • 속성 그래프(neo4j)
    • 고유한 식별자
    • 유출(outgoing) 간선 집합
    • 유입(incoming) 간선 집합
    • 속성 컬렉션(키-값 쌍)
  • 사이퍼 질의 언어
    • 속성 그래프를 위한 선언형 질의 언어
  • SQL의 그래프 질의
    • 재귀 공통 테이블 식(recursive common table expression, CTE) with recursive
    • SQL은 복잡하다
  • 트리플 저장소와 스파클(Datomic)
    • 속성 그래프랑 거의 비슷
    • 주어, 서술어, 목적어 (subject, predicate, object) 를 트리플(triple) 이라고 부름
    • 시멘틱웹
    • RDF 데이터 모델
    • 스파클(SPARQL) 질의 언어는 RDF 데이터 모델을 사용한 트리플
  • 초석: 데이터로그
    • 스파클이나 사이퍼보다 훨씬 오래된 언어로 1980년대 학계에서 연구됨
    • 트리플을 작성하는 대신 서술어로 작성한다

정리

애플리케이션의 요구사항에 가장 적합한 모델을 찾고 싶은 욕구를 충분히 자극

참조