- 0) 컨셉
- 기존 복잡한 관계형 Join쿼리로부터 탈피하여, 그냥 많이 저장하고~ 빠르고 단순하게 조회하자!
- 즉, 중복적인 비정규 데이터를 많이 만듬으로써~ 용량적 이점을 포기하고 속도적 이점에 집중함.
- (Scale-Out 장점으로, 단점을 상쇄)
- 예) Inverted Search Index : 기존 Key-Value 에 해당하는 Value-Key 를 그냥 만들어 두고 씀.
- 예) Aggregation : 1대n의 Join관계를 줄이고, 단순히 한곳이 저장림. (다양한 Secodary-Index 으로 커버)
- 예) Client Side Join : 중복적인 Data가 자주바뀌는 성격이면, Client단에서 처리쉽게 할수있도록 지원.
- 예) Server Side Join : MapReduce를 처리 할 수 있도록 지원.
- Schema를 Application에서 관리 -> 느슨함 -> 개발운영업무가 아주 유연해지고, 자유도를 높임.
- 1-1) 모델링 기본개념
- Denormalization : 테이블간 Join을 제거하고, 데이터 중복저장.
- Aggregates : 데이터에 데이터를 넣는식으로 집합화.
- Application Side Joins : ...
- 1-2) 일반적 모델링 기법
- Atomic Aggregation : 여러게의 테이블에 작업시, 트랜잭션 처리 보장을 위한~ 하나의 Document에 Aggregation 처리하는 기법
- Enumerable Keys : Atomic Count를 활용하여, RDBMS의 AutoIncress Sequence처럼 쓸수있음. (예: redis의 INCR. Cassandra의 Counter 등) ...
- Index Table : 자체적으로 알아서 만들어서, 쓰도록 해라.
- Dimensionality Reduction : (예: mongoDB의 geospatial 타입같은것)
- Composite Key Index : RowKey를 복합 필드를 '구분자'로 이어서, 키값으로 사용. (예:"서울|강남|회사")
- Aggregation with Composite Keys : ...
- Inverted Search Index : (K,V) 를 (V,K) 로 피벗팅 하여, 응용하는 기법. (예: url1,tag1 -> tag1검색 -> url1)
- 1-3) 계층적 모델링 기법
- Tree Aggregation : 전체 트리 자체를 하나의 Documenet에 저장하는 방식. (Read좋음 Write나쁨) (mongoDB에 쓰임)
- Adjacency List : 인접 리스트. (트리구조에서 인접한 parent 및 childs 참조정보 저장) (DynamoDB에 쓰임)
- Materialized Path : 트리구조에서 Root으로부터 절대경로 자체를 Key으로 저장함. (HBase에서 쓰임)
- Nested Sets : 실무에서는 잘 안쓰이는... 자식노드에 범위를 저장함.
- Nested Document Flattening (Numbered Field Names) : 중첩된 Document 의 평면화. (일련번호가 매겨진 필드명)
- Nested Documents Flattening (Proximity Queries) : 중첩된 Documents 의 평면화. (인접쿼리)
- Batch Graph Processing : ...
- 2) 문제점
- 쿼리패턴 변화시 어려움 : ...
- 데이터 수정 : ...
- 분산 시스템을 고려해서, 해야함 : ...
- Dev-Ops 가 어려움 : 기존의 개발과 운영을 통합적으로 관리하는 시스템에 부적합. (운영팀이 NoSQL책임못짐)
- 3) 진행과정
- 3-1) 선정
- 각종 NoSQL 종류에 따라 모델링이 확 달라짐으로... 선정이 중요하다.
- 예) Cassandra : RowKey 정렬불가. Secondary-Index 정렬불가. column-key 부분정렬만 가능. partial-scan불가. Equal 쿼리는 와따!
- 예) HBase : RowKet정렬 및 Partial-Scan 가능. Secondary Index 자체지원 없음.
- 3-2) 도메인 모델 파악
- 어떤 Entity가 존재하는지? 및 Entity-Relationship 파악
- ERD 도식화
- (NoSQL에서도 서비스 도메인 Entity는 무조건 파악을 해야한다)
- 3-3) 쿼리결과 디자인 및 테이블 생성
- 애플리케이션에서 쿼리가 수행되어 나오는 결과값을 도출
- 결과를 기반으로 테이블 추출
- 3-4) 패턴을 이용한 데이터 모델링
- ...
- 3-5) 최적화
- ...
- 3-1) 선정
- 4) NoSQL 고려요소
- 일관성 모델 : ...
- 데이터 모델 : ...
- R/W 성능 : ...
- 단일 고장점(Hot-Spot) : ...
- 원자성 지원(Atomic) : ...
- 하드웨어 구성 :
- 무중단 시스템 :
- 5) 데이터 모델링 툴
- http://dataware.kr/solution/new_idx
- https://hackolade.com
-끝-