NoSQL 개념

noname2048·2021년 6월 1일
0

보다 작고 빠른 데이터 베이스는 SQL, 메모리 only 캐시와 같은 것은 NoSQL로 작성하는 트렌드가 유행하고 있다.

NoSQL은 SQL이 아닌 데이터베이스의 총집합으로, 잘 사용되던 SQL 밖의 새로 대두되는 DB 종류에 대한 통칭이다.
이러한 DB에는 key-value, key-document, 그래프, 등등 (원래 4가지로 구분)

  • application side join
    • 아무래도 NoSQL은 조인이 어렵다. 이에 데이터를 가져온 뒤에 어플리케이션 사이드에서 조인하는 기법이 있다
  • composite key
    • 키에 규칙을 두어 클러스터를 구성하거나, 검색을 용이하게 하는 방법
  • inverted search index
    • 검색키워드와 url을 매칭할때, url을 키로 다시 만들어서, 용도에 맞게 변환해서 처리하는 기법. 수집할때의 방법과 사용할때의 방법이 다를경우 적용하는 방법 (빅데이터 관련 기법이라고 생각하고 넘어갔다)
  • 계층 데이터 구조
    • SQL은 성숙하여 이미 잘 되어있다. 이에 NoSQL은 이를 참고함
  • tree aggregation
    • 트리가 크지 않은 경우에, 다중첩 json을 하나의 key에 저장한다.
  • materialized path
    • 키값을 루트로부터의 현재까지 경로로 저장하는 방법, 서브트리를 쿼리하기 편하다고 한다.

모델링 기법
1. 도메인모델 파악하기 (설계가 80%정도로 중요함)

  • ERD 그려보기
  1. GET/PUT 만을 가지고 데이터를 사용할 수 있도록 정리 (Join, Grouping 기능이 없다고 생각하자)
  2. 기능최적화
  • 실제 데이터의 조회/입출력을 바탕으로 최적화
  1. 부하테스트 진행
  • 안정성/확장성을 검사하면서, 여러개의 NoSQL을 조합하여 성능을 향상할 방법 정리하기
  1. 하드웨어 선정하고 디자인

MongoDB 사용

  • MongoDB (10gen)사에서 C++로 개발
  • 트랜젝션에 적합하지 않음
  • 쌓아놓고 삭제가 없을 경우에 적합
  • 메모리 크기가 성능을 좌우. 초과시 문제 발생
  • one query로 모두 해결이 되게끔 collection model 설계
  • 하나의 도큐먼트에 json을 중첩하여 한번에 적용할 수 있도록 정리
  • 부분결함이 가능하다
  • 많은 인덱스를 사용할때 메모리를 가져와야한다.
  • key가 중복되어 (비정규화) 효율성이 떨어진다.
  • transactions 지원이 미약하다
  • MapReduce 작업이 Haddop에 비해 성능이 떨어짐
  • 대신 Read/Write 가 빠르다.
    • 이는 Memory Mapped를 사용해서 발생하는 특징.
    • RAM 과 같은 하드웨어 지원 위에서 성능을 발생
  • 성숙 기간이 짧아 빅데이터/분산이용시 레플리카 비정상동작, 데이터 손실등의 단점을 감안해야함
  • 쓰기 100배, 읽기/쓰기는 3배 빠름

즉, 분산시스템과과 같은 특정 목적에 적합.

  • MongoDB 샤딩과 같이 데이터베이스를 응용/중계자/데이터 계층으로 분할 가능
    • 하나의 MongoDB 중계를 통해 여러개의 몽고DB를 하나처럼 사용가능
  • MongoDB 맵리듀스
    • 대용량을 split, 병렬로 분산

출처

무료로 강의를 풀어주신 Tacademy에 감사드립니다.
MongoDB 프로그래밍 | T아카데미

profile
설명을 쉽게 잘하는 개발자를 꿈꾸는 웹 개발 주니어

0개의 댓글