보다 작고 빠른 데이터 베이스는 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%정도로 중요함)
- GET/PUT 만을 가지고 데이터를 사용할 수 있도록 정리 (Join, Grouping 기능이 없다고 생각하자)
- 기능최적화
- 부하테스트 진행
- 안정성/확장성을 검사하면서, 여러개의 NoSQL을 조합하여 성능을 향상할 방법 정리하기
- 하드웨어 선정하고 디자인
MongoDB 사용
- MongoDB (10gen)사에서 C++로 개발
- 트랜젝션에 적합하지 않음
- 쌓아놓고 삭제가 없을 경우에 적합
- 메모리 크기가 성능을 좌우. 초과시 문제 발생
- one query로 모두 해결이 되게끔 collection model 설계
- 하나의 도큐먼트에 json을 중첩하여 한번에 적용할 수 있도록 정리
- 부분결함이 가능하다
- 많은 인덱스를 사용할때 메모리를 가져와야한다.
- key가 중복되어 (비정규화) 효율성이 떨어진다.
- transactions 지원이 미약하다
- MapReduce 작업이 Haddop에 비해 성능이 떨어짐
- 대신 Read/Write 가 빠르다.
- 이는 Memory Mapped를 사용해서 발생하는 특징.
- RAM 과 같은 하드웨어 지원 위에서 성능을 발생
- 성숙 기간이 짧아 빅데이터/분산이용시 레플리카 비정상동작, 데이터 손실등의 단점을 감안해야함
- 쓰기 100배, 읽기/쓰기는 3배 빠름
즉, 분산시스템과과 같은 특정 목적에 적합.
- MongoDB 샤딩과 같이 데이터베이스를 응용/중계자/데이터 계층으로 분할 가능
- 하나의 MongoDB 중계를 통해 여러개의 몽고DB를 하나처럼 사용가능
- MongoDB 맵리듀스
출처
무료로 강의를 풀어주신 Tacademy에 감사드립니다.
MongoDB 프로그래밍 | T아카데미