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: 여러 항목이 여러 다른 항목과 서로 연결되는 관계→ 질의 시 조인 필요
- Many-to-one: 여러 개 항목이 하나에 연결
문서 데이터베이스의 역사
- 계층형 모델
트리 구조, 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로 변환해서 써봤는데 이것도 도중도중 깨져서 손을 보긴해야했다
그냥 맘편하게 바로 티스토리에 정리해야겠다 싶더라..ㅠㅠ
참고 문헌: 데이터 중심 애플리케이션 설계(마틴 클레프만, 위키북스)
반응형
'IT것이 알고싶다 > 데이터 중심 애플리케이션 설계' 카테고리의 다른 글
06.파티셔닝 (2) | 2025.05.13 |
---|---|
05.복제 (0) | 2025.05.13 |
04부호화와 발전 (0) | 2025.05.07 |
03저장소와 검색 (0) | 2025.05.06 |
1장 신뢰할 수 있고 확장 가능하며 유지보수하기 쉬운 애플리케이션 (0) | 2025.04.22 |