책너두 (데이터 중심 애플리케이션 설계) 5일차 (~70p)
- Book/데이터 중심 애플리케이션 설계
- 2023. 3. 19.
요약
- 데이터를 위한 질의 언어 중, 맵리듀스 질의에 대해 이해하게 됨.
- map, reduce 함수를 작성해야 하며, pure 함수여야 함.
- 그래프형 데이터 모델에 대해 알게 됨.
- 데이터 간 연결이 복잡할 때 모델링하기 좋음.
- 그래프 데이터로 구조화하기 위한 여러 모델이 있음.
- 속성 그래프
- 사이퍼 질의 언어, SQL 그래프 질의
- 트리플 저장소
- 스파클
- 시맨틱웹, RDF 내용에 대해서 내용이 잘 이해가 가지 않음… 다시 읽어봐야 함..
- 속성 그래프
- 데이터로그언어에 대해 알게됨
- 현재 데이터 시스템에도 기초 언어로 초석이 되어 사용되고 있음.
메모
맵리듀스 질의
- 많은 컴퓨터에서 대량의 데이터를 처리하기 위한 프로그래밍 모델
- 몽고DB, 카우치DB를 포함한 일부 NoSQL 데이터 저장소가 제한된 형태의 맵리듀스를 제공함.
- 맵리듀스는 선언형, 명령형 질의 언어의 중간 정도에 있음.
- 함수형 프로그래밍 언어에 있는 map, reduce 함수를 기반으로 함. (p47~49 예시 참고)
- 몽고DB의 경우 두 함수는 순수(pure) 함수여야 함.
- 맵리듀스는 상당히 저수준 프로그래밍 모델임
- 질의 중간에 자바스크립트를 사용할 수 있다는 점은 고급 질의가 가능한 훌륭한 기능임.
- 이 기능이 맵리듀스에만 해당하는 건 아님. (일부 SQL 데이터베이스도 자바스크립트 함수로 확장될 수 있음.)
- 맵리듀스는 함수 두 개를 신중하게 작성해야 하는데, 하나의 질의를 작성하는 것보다 어려움
- 그래서, 몽고DB 2.2 는 집계 파이프라인(aggregation pipeline) 이라 부르는 선언형 질의 언어 지원이 주가됨. (p49 예시 참고)
그래프형 데이터 모델
- 데이터에서 다대다 관계까 매우 일반적이고, 데이터 간 연결이 복잡해진다면
그래프
로 데이터를 모델링하기 시작하는 편이 더 자연스러움. - 그래프는 두 유형의 객체로 이루어짐.
- 정점(vertex)
- 간선(edge)
- 많은 유형의 데이터를 그래프로 모델링할 수 있음.
- 소셜 그래프
- 웹 그래프
- 도로나 철도 네트워크
- 그래프의 정점은 같은 유형 뿐만 아니라 다른 유형의 객체로 사용할 수 도 있음.
- ex) 페이스북의 정점 → 사람, 장소, 이벤트, 체크인, 사용자가 작성한 코멘트 등등..
- 그래프에서 데이터를 구조화하고 질의하는 몇 가지 방법이 있음.
- 속성 그래프 모델
- 트리플 저장소 모델
속성 그래프
- 속성 그래프 모델에서 각 정점은 다음의 요소로 구성됨
- 고유 식별자
- 유출(outgoing) 간선 집합
- 유입(incoming) 간선 집합
- 속성 컬렉션(키-값 쌍)
- 각 간선은 다음의 요소로 구성됨
- 고유 식별자
- 간선이 시작하는 정점(꼬리 정점)
- 간선이 끝나는 정점(머리 정점)
- 두 정점 간 관계 유형을 설명하는 레이블
- 속성 컬렉션(키-값 쌍)
- 이러한 속성 그래프를 이용하면 데이터 모델링을 위한 많은 유연성을 제공함.
- 관계형 데이터베이스에서 그래프 데이터를 표현할 수 있음을 제안함. (p52~53 예시 참고)
- 또, 그래프는 발전싱이 좋아 애플리케이션의 데이터 구조 변경을 수용하여 그래프를 쉽게 확장할 수 있음
사이퍼 질의 언어
- 사이퍼(Cypther) : 속성 그래프를 위한 선언형 질의 언어
- 꼬리노드, 머리 노드를 화살표 포기를 사용하여 정점간 간선을 만들 수 있음.
- MATCH 문을 이용해서 그래프에서 패턴을 찾는다. (p54 예시 참고)
- 선언형 질의의 경우, 질의 최적화기가 가장 효율적이라고 예측한 전략을 자동으로 선택하므로, 수행 과정을 자세히 지정할 필요는 없음.
SQL의 그래프 질의
- 속성 그래프에서 관계형 데이터베이스에서 그래프 데이터를 표현할 수 있었다.
- 그래프 데이터를 관계형 구조로 넣어도 SQL 을 사용해서 질의를 할 수는 있지만 어렵다.
- 왜냐면 관계형 데이터베이스에서는 질의에 필요한 조인을 미리알아야 하는데, 그래프 질의에서 찾고자하는 정점이 가변적이기 때문임.
- SQL 1999 이후, 가변 순회 경로에 대한 질의 개념을 재귀 공통 테이블 식(recursive common table expression = WITH RECURSIVE 문) 을 사용해서 표현할 수 있음.
- 하지만 with recursive 는 상당히 복잡함. (p56 예시참고)
- 따라서, 애플리케이션에 적합한 데이터 모델을 선택하는 작업은 중요함.
- 그래프 데이터를 관계형 구조로 넣어도 SQL 을 사용해서 질의를 할 수는 있지만 어렵다.
트리플 저장소와 스파클
- 속성 그래프 모델과 거의 동등함.
- 같은 생각을 다른 용어를 사용하여 설명함.
- 트리플 저장소에서는 모든 정보를 주어, 서술어, 목적어처럼 매우 간단한 세 부분 구문(three-part statements) 형식으로 저장함.
- 트리플의 주어는 그래프의 정점과 동등함.
- 목적어는 2가지 중 하나임.
- 문자열, 숫자 같은 원시 데이터 타입 값.
- 그래프의 다른 정점. (p57 참고)
- 터틀 형식으로 데이터를 관리함.
시맨틱 웹
- 트리플 저장소와 시맨틱 웹은 완전히 독립적임.
- 하지만 사람들은 이 둘이 매우 밀접한 관계를 가지고 있다고 생각하기에, 얘기해볼 필요가 있음.
- 시맨틱 웹은 간단하고 합리적인 개념임
- 웹 사이트는 이미 사람이 읽을 수 있는 텍스트, 그림 정보를 게시하고 있으니, 컴퓨터가 읽게끔 기계가 판독 가능한 데이터로도 정보를 게시하자는 개념임.
- 자원 기술 프레임워크(Resource Description Framework, RDF) : 서로 다른 웹 사이트가 일관된 형식으로 데이터를 게시하기 위한 방법을 제안함.
- 만물 데이터베이스인 데이터 웹(web of data)에 자동으로 결합할 수 있게 함.
- 시멘틱 웹은 2000년대 초반 과대평가됐고, 현재까지 실현 흔적이 없어 부정적인 견해가 많음.
RDF 데이터 모델
- 트리플 저장소에서 사용한 터틀 언어는 RDF 데이터를 사람이 읽을 수 있는 형식(human-readable format)으로 표현함.
- 떄로는 RDF 를 XML 형식으로 쓰기도 함.
- 하지만 XML 형식은 훨씬 내용을 장황하게 만듦.
스파클 질의 언어
- 스파클(SPARQL)은 RDF 데이터 모델을 사용한 트리플 저장소 질의 언어임.
- 사이퍼보다 먼저 만들어 졌고, 사이퍼의 패턴 매칭을 스파클에서 차용했음.
초석: 데이터로그
- 데이터로그(Datalog)는 스파클, 사이퍼보다 훨씬 오래된 언어임.
- 질의 언어의 기반이 되는 초석을 제공하기 때문에 중요함.
- 실제 일부 데이터 시스템에서 데이터로그를 사용함.
- ex) 데이토믹, 캐스갤로그
- 데이터로그의 데이터 모델은 트리플 저장소 모델과 유사하지만 조금 더 일반화 됨.
- 주어 서술어 목적어 대신 → 서술어(주어, 목적어)로 작성한다.
- 데이터로그의 질의는 단계를 나눠 한 번에 조금씩 질의한다.
- 서술어를 데이터베이스에 전달하는 규칙(rule)을 정의함.
- 이 규칙은 함수가 다른 함수를 호출하거나 재귀적으로 자신이 호출하는 것처럼 다른 규칙을 참조할 수 있음. (p64 예시 참조)
- 데이터로그 접근 방식은 이전의 질의 언어와 다른 사고가 필요함.
- 하지만 다른 질의 규칙을 결합하거나 재사용할 수 있기에 매우 강력한 접근 방식임.
정리
- 역사적으로 데이터를 하나의 큰 트리로 표현하려고 노력했지만 다대다 관계를 표현하기에는 트리 구조가 적절하지 않았음.
- 이를 해결하기 위해 관계형 모델이 고안됨.
- 하지만, 관계형 모델에도 적합하지 않은 애플리케이션이 있음.
- 즉, 새롭게 등작한 비관계형 데이터 저장소 NoSQL이 있고, 다음과 같이 두 가지 주요 갈래가 있음.
- 문서 데이터베이스
- 그래프 데이터베이스
'Book > 데이터 중심 애플리케이션 설계' 카테고리의 다른 글
책너두 (데이터 중심 애플리케이션 설계) 7일차 (~97p) (2) | 2023.03.22 |
---|---|
책너두 (데이터 중심 애플리케이션 설계) 6일차 (~84p) (0) | 2023.03.21 |
책너두 (데이터 중심 애플리케이션 설계) 4일차 (~49p) (0) | 2023.03.17 |
책너두 (데이터 중심 애플리케이션 설계) 3일차 (~37p) (0) | 2023.03.17 |
책너두 (데이터 중심 애플리케이션 설계) 2일차 (~26p) (0) | 2023.03.16 |