📝 상세 정리#
인트로#
- 데이터 모델은 소프트웨어 개발에서 제일 중요하다
- 특히 데이터 모델을 표현하는 방법이 중요한데
- 어떤 데이터를 저장할것인가 (사람 / 조직 등)
- 어떤 형태로 저장할것인가 (json / xml 등)
- 어떤 장소에 저장할것인가 (램 / 하드디스크 등)
- 어떤 방식으로 저장할것인가 (전류 / 빛의파동 등)
- 결국 이들을 추상화시키는게 중요하다.
관계형 모델과 문서 모델#
1970년 에드가 코드가 제안한 관계형 모델을 기반으로한 SQL이 젤 잘 알려져있는데
- 이는 비즈니스 데이터 처리에 근간을 둔다
- 트랜잭션 처리
- 일괄 처리 등
- 이는 비즈니스 데이터 처리에 근간을 둔다
네트워크 모델, 계층 모델등이 대안으로 나왔지만, 결국 관계형 모델이 평정했다.
NoSQL의 탄생
- 2010년대, Not Only SQL이라는게 유행을 탔는데
- 이는
- 대규모 데이터셋
- 높은 쓰기 처리량 달성
- 무료 오픈 소프트웨어에 대한 선호도
- 특수 질의 동작
- 동적인 데이터 모델
- 등을 위해서였다.
- 이는
- 가까운 미래에는 관계형 DB도 다양함을 위해 비관계형 데이터 스토어와 함께 사용될텐데, 이를 다중 저장소 지속성이라 한다.
- 2010년대, Not Only SQL이라는게 유행을 탔는데
객체 관계형 불일치
- 데이터를 관계형 테이블에 저장할때 각 모델 객체 사이에 전환 계층이 필요한데, 이를 임피던스 불일치라고 한다.
다대일과 다대다 관계
- 중복된 데이터를 정규화하려면 다대일 관계가 필요한데, 이는 문서 모델에 적합하지 않다.
- 문서 DB에서는 조인에 대한 지원이 약해서
- 그러면 다중질의를 만들어서 흉내내야하는데…
- 중복된 데이터를 정규화하려면 다대일 관계가 필요한데, 이는 문서 모델에 적합하지 않다.
어떤 데이터 모델이 애플리케이션 코드를 더 간단하게 할가?
- 문서와 비슷한 구조를 여러 테이블에 나누어 찢는 관계형 기법은 불필요하게 복잡해진다.
- 너무 깊게 중첩되지 않으면 괜찮지만…
- 문서와 비슷한 구조를 여러 테이블에 나누어 찢는 관계형 기법은 불필요하게 복잡해진다.
문서 DB와 관계형 DB의 통합
- 대부분의 관계형 DB는 이제 XML도 지원함
- 심지어 둘이 점점 비슷해지는중!
- 이것이 가야할 올바른 길
데이터를 위한 질의 언어
SQL은 선언형, IMS와 코다실은 명령형 코드
그래프형 데이터 모델#
- 그래프는 정점과 간선이라는 객체로 이루어진다.
- 속성 그래프 모델
- 고유식별자 / 유출 / 유입 / 컬렉션 등으로 이루어진 정점과
- 고유식별자 / u, v/ 관계 유형 / 컬렉션 등으로 이루어진 간선으로 만든 그래프 데이터 모델
- 사이퍼 질의언어
- 속성 그랲를 위한 질의 언어
- 트리플 저장소와 스파클
- 트리플 저장소 모델은 속성 그래프 모델과 비슷
정리#
- 데이터 모델은 광범위한 주제임
- 데이터를 한 트리로 크게 관리하고싶었지만, 이는 다대다 관계를 표현하기 어려었음
- 하지만 여기에도 애로사항이 있어서 NoSQL도 만들고, 그래프도 만들고…
- 아무튼 세 모델은 각자의 영역에서 훌륭하고, 서로를 흉내낼 수는 있지만 엉망이다.
- 게놈데이터모델, 빅데이터스타일 모델, full-text 검색등 여러가지가 더 있지만, 아무튼 다 알고 잘 써야한다는 이야기
