• 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) 최적화
      • ...
  • 4) NoSQL 고려요소
    • 일관성 모델 : ...
    • 데이터 모델 : ...
    • R/W 성능 : ...
    • 단일 고장점(Hot-Spot) : ...
    • 원자성 지원(Atomic) : ...
    • 하드웨어 구성 : 
    • 무중단 시스템 : 
  • 5) 데이터 모델링 툴
    • http://dataware.kr/solution/new_idx
    • https://hackolade.com

-끝-

'NoSQL' 카테고리의 다른 글

Weaviate vdb  (0) 2024.10.30
CQL  (0) 2020.03.02
NoSQL 이란?  (0) 2020.02.29
분산시스템 이란?  (0) 2020.02.29
DynamoDB  (0) 2019.05.18

+ Recent posts