Database - SQL vs NOSQL
SQL
장점
엄격한 스키마
- 데이터 무결성 보장
- 관계는 각 데이터를 중복없이 한번만 저장
단점
RDB이므로 관계를 맺고 있음
- JOIN문이 많은 복잡한 쿼리가 생길 수 있음
수평적 확장(Scale out) 어려움, 수직적 확장(Scale up) 가능
- 수직정 확장 = 하드웨어 업그레이드
도입
- relational 데이터가 자주 변경 되는 경우(NoSQL은 여러 컬렉션을 모두 update해야함)
- 스키마가 확정되어 잘 바뀔 일이 없는 경우(대기업)
NoSQL
장점
스키마 없음
- 데이터 수정이 자유롭고, “필드(컬럼)” 관리도 쉬움
database > collections > documents 구조(mongoDB)
- document : key-value형태의 BSON(Binary JSON). 쿼리 속도 빠름
수직 확장, 수평 확장 쉬움
단점
- data update 불리함
- 댓글 컬렉션 => {댓글:A}
- 글 컬렉션 => {글:ㄱ, {댓글:A}}
- 데이터가 여러 컬렉션에 중복되어 n번 수행해야 함
도입
- 데이터 구조를 한번에 확정할 수 없고, 추후 변경 / 확장 될 수 있는 경우(스타트업)
- read는 자주 하고, update는 잘 안하는 경우
- 트래픽이 많아 분산 디비가 필요한 경우
종류
Key-value(Memcached, Redis, Amazon Dynamo DB)
Document(MongoDB)
Column-family(HBase)
Graph
그래프를 제외한 세 모델은 집합-지향(Aggregate-oriented) 모델
ORM
Object Relational Mapping
- DB의 schema를 class에 매핑. => DB mingration, 객체 생성
- query 대신 함수와 객체를 사용해 DB에 접근한다.(생산성 증가)
도입
- 일단 nosql 보다 RDB가 더 유리한 상황일 때
- 객체 지향적인 코드로 직관적이고 생산적인 개발을 하고 싶을 때
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
