2장 데이터 모델과 질의 언어

 

1. 관계형 모델과 문서모델

  • 관계형 모델
    • Relation(관계)로 구성, 각 Relation은 순서없는 Tuple(Row)의 모음
    • 트랜잭션 처리와 일괄처리에 보통 사용
  • NoSQL의 탄생 (NotOnlySQL) 
    • RDBMS보다 쉽게 할 수 있는 뛰어난 확장성의 필요
    • Free Open Source SW에 대한 선호도 확산
    • 더욱 동적이고 풍부한 데이터 모델에 대한 바람
  • 객체 관계형 불일치 (Impedance Mismatch)
    • 애플리케이션 코드(객체지향 언어)와 데이터 모델 간 전환 계층 필요
    • ORM(: Hibernate, ActiveRecord)으로 완화할 수 있지만 완전히 해결되진 않음
    • 예시: 링크드인
      - 이름/지역/업계 (1:1), 직무/학업/연락처 (1:N)
    • RDBMS에서는 여러 테이블 조인 필요
    • 문서모델(JSON) 사용시 모든 정보 중첩
      • 객체-관계형 불일치 완화 가능
      • 스키마 제약 없음 → 데이터 일관성 문제 발생 가능
      • JOIN 같은 복잡한 질의는 불리
  • 다대일/다대다 관계
    • Many-to-one: 여러 개 항목이 하나에 연결
      중복된 데이터를 정규화 하는 방안
      → 문서 모델에 적합하지 않음
    • Many-to-Many: 여러 항목이 여러 다른 항목과 서로 연결되는 관계→ 질의 시 조인 필요

문서 데이터베이스의 역사

  • 계층형 모델
    트리 구조, JSON 유사 구조
    다대다 구조는 표현이 어려움 -> 조인 지원X
  • 네트워크 모델(=코다실 모델) 
    계층 구조를 일반화해 다중 부모를 허용한 구조
    레코드 간 연결이 포인터와 비슷한 구조
     접근 경로를 수동으로 추적해야함

  • 관계형 모델 
    모든 데이터를 테이블로 배치, 질의 최적화기가 실행 순서와 색인 자동 결정

문서모델의 장점

미흡한 조인 지원은 애플리케이션에따라 문제일 수도 아닐 수도 있다.

  • 스키마 유연성 (Schema-on-read)
    - 스키마가 없어 임의의 키와 값을 추가가능, 읽기 시에 필드의 존재여부를 보작하지 않음
    - Schema-on-read(읽기 스키마): 데이터 구조는 암묵적이며 데이터를 읽을 때만 해석
      데이터가 여러 다른 유형으로 구성되어 있을 때 유리
    * Schema-on-write(쓰기 스키마): RDBMS의 전통적인 접근 방식으로 스키마는 명시적이고 DB는 쓰여진 모든 데이터가 스키마를 따르고있음을 보장

  • 데이터 지역성 (Storage Locality)
    - Storage Locality(저장소 지역성)
    애플리케이션이 자주 전체 문서에 접근해야 할 때 유리
    * 다중테이블로 나뉘어져있으면 전체 검색을 위해 다중 색인 검색이 필요해져 비효율

2. 데이터를 위한 질의 언어

명령형 vs 선언형

구분 명령형 언어 선언형 언어
정의 어떻게 처리할지 명령 무엇을 얻고 싶은지만 선언
예시 JavaScript 반복문 SQL (SELECT ... WHERE)
특징 절차 직접 제어 결과 조건만 지정
DB 예시 IMS, CODASYL (명령형 접근) 관계형 DB + SQL (선언형 접근)


선언형 언어의 장점
- 질의 최적화를 DB 엔진이 알아서 처리 → 쿼리 작성자는 "결과를 정의" 만 하면 됨
- 성능 개선, 디스크 구조 변경 등이 질의 수정 없이 가능
- 병렬 처리(멀티코어, 분산 환경)에 훨씬 유리
코드량이 줄어들고 유지보수가 쉬움

Ex)웹브라우저

  • CSS: 선언형 스타일링 (예: li.selected > p { background: blue; })
  • JavaScript: 명령형 스타일링 (반복문, 조건문, 스타일 직접 적용)

MapReduce (맵리듀스)

  • 대량의 데이터를 처리하기 위한 프로그래밍 모델
  • Read-only 질의를 수행할 때 많이 사용
  • 사용자가 map 함수와 reduce 함수를 직접 작성

📌예시 Mongo DB mapreduce

옛날 버전 MongoDB 2.x, 3.x 시절에는 mapReduce 명령이 주요 기능 중 하나였음

MongoDB 4.2 버전부터 mapReduce 기능 비권장(deprecated) 처리

MongoDB 6.0 버전부터 아예 공식 문서에서도 사용 중단 강조함

현재는 내부 함수인 Aggregation Pipeline 사용 강력 추천

 

3. 그래프형 데이터 모델

용어 사용 예시 설명
사이퍼(Cypher) Neo4j 노드와 관계 질의 언어
SPARQL RDF 트리플 스토어 주어-서술어-목적어 질의
RDF 시멘틱 웹 주어-속성-값 구조 표준
시멘틱 웹 웹 메타데이터 의미론적 연결 기술
데이터로그 논리형 DB 논리 추론 기반 선언형 언어

 

 

 

 

 

분명 글쓰기에 마크다운모드가있어서 맘놓고 onenote에 작성하고 복붙을했는데..

왠걸 복붙하자마자 다 깨져부린ㅠㅠㅠ


markdown을 html로 변환해서 써봤는데 이것도 도중도중 깨져서 손을 보긴해야했다

그냥 맘편하게 바로 티스토리에 정리해야겠다 싶더라..ㅠㅠ

 

참고 문헌: 데이터 중심 애플리케이션 설계(마틴 클레프만, 위키북스)

반응형