NoSQL(Not Only SQL) 배경
- Web 시장의 발전과 함께 데이터의 양이 폭발적으로 증가함
- 웹 서비스의 데이터 처리는 xml, json으로 처리 되는데 RDB에서는 너무 오래 걸림
- 하나의 서버를 만드는거 보다 여러개의 서버를 연결시켜 확장하는 방법이 더 비용 에 절감되기 시작함
- 수직확장 → 수평확장
SQL vs. NoSQL
- Data Storage(데이터 저장)
- SQL- 데이터를 테이블로 저장. 미리 작성된 스키마를 기반으로 형식에 맞게 저장됨
- NoSQL- key-value, document, graph, wide-column등으로 저장 할수 있음
- key-value - 속성 이름- 연결된 데이터 값
- document - JSON유사 형식으로 데이터를 문서화함
- wide-column - 데이터베이스의 열에 대한 데이터 관리를 집중하는 데이터베이스. 각 열에는 key-value형식으로 데이터가 저장되고 컬럼 패밀리라고 하는 열의 집합체를 단위로 데이터를 처리 할수 잇음. 하나의 행에 많은 열을 포함할수 잇는 유연한 모델.
- Schema(스키마)
- SQL- 고정된 스키마 필요
- NoSQL- 스키마의 형태가 동적임
- Query(쿼리)
- SQL- 데이터베이스에서 정보는 요청하는 행동. 테이블의 형식과 테이블의 관계에 맞춰서 데이터를 요청함. SQL과 같은 구조화된 쿼리 언어를 정보 요청에 사용
- NoSQL- 데이터 그룹 자체를 조회 하는것에 초점을 둠. 구조화 되지 않은 쿼리로도 데이커 요청이 가능함. UnQL(UnStructured Query Language)
- Scalability(확장성)
- SQL- 수직적 확장 (높은 메모리, CPU를 사용하는 확장).
- NoSQL- 수평적 확장 (보다 값싼 서버 증설, 또는 클라우드 서비스 이용하는 확장). 추가적 서버 구축이 편리함
- 사용 케이스
- SQL
- 데이터베이스의 ACID성질을 준수해야하는 경우
- 전자 상거래, 금융서비스 etc
- 소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
- NoSQL
- 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
- 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
- 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우
MongoDB

****데이터의 형태
- 정형데이터: 정해진 형식이 o 예) excel, csv
- 비정형데이터: 정해진 형식이 x 예) 동영상, 음성, 이미지
- 반정형데이터: 위 두 가지를 섞음, 형식이 있지만 유연한 데이터 예) json(key: value라는 틀이 있지만 안에 무엇이든 들어갈 수 o), html, xml