NoSQL 이란
데이터에 대한 요구사항 다양해지면서 그에 맞춰 데이터 설계 방식도 다양해지고있다.
- 수천만 회원 간의 연결 관계를 분석해서 친구 추천
- 대량의 데이터를 실시간으로 수집하고 통계를 추출
- 테라바이트에서 페타바이트 이상의 데이터 처리
- RDBMS도 되지만 더 알맞는 기술 찾아야될 때도 있다.
- 예를 들어 회원 간 연결관계는 그래프를 지원하는 데이터베이스를 사용하면 분서이 용이
- 대량 데이터 저장하고 통계 생성위해서는 수평확장을 지원하는 디비가 필요하고.
- 이런 특정 요구사항에 맞춰 데이터 저장하고 조회하는 기법 제공하는 데이터베이스를 NoSQL이라함.
- Not Only SQL.
NoSQL 쓰는 주된 이유
- 대용량 데이터나 분산 처리
- 고속 읽기 쓰기 성능
- 특정한 요구사항에 맞는 데이터 설계
- 비정형 데이터 처리 또는 유연한 스키마
- 수평 확장을 통한 대용량 데이터 처리에 강점이 있는 NoSQL이 있는데 Cassandra, HBase같은거
(참고)RDBMS와 샤딩
- RDB에서도 수평 확장이 가능하다.
- 예를 들어 10개의 디비를 구성하고 디비에 데이터를 샤딩해서 넣는식으로.
- 하지만 이건 NoSQL의 클러스터와 다르다.
- NoSQL의 클러스터는 개념적으로 데이터베이스가 하나라면 RDBMS는 서로 다른 디비 10개를 사용하는것과 같다.
- 클러스터에서는 노드 하나가 장애발생해도 전체 클러스터는 정상작동하지만...
- 샤딩으로 구성한 RDBMS는 하나에 장애 생기면 해당 데이터베이스에 속한 데이터는 못씀.
고속 성능과 데이터 구조
- 분산 처리 지원, 높은 성능 제공위해 NoSQL은 RDBMS가 제공하는 트랜잭션의 ACID 요건 중 일부를 지원안한다.
- 예를 들어 다중 네트워크에서 동작하는 클러스터에서 네트워크 단절 문제가 발생시 일관성 보장 안하는 대신 DB를 사용할 수 있게 하는 식.
- 또한 NoSQL은 메모리 사용율 높이고 읽기, 쓰기에 맞는 데이터 구조 사용해 성능을 높임.
- 인덱스 생성 최소화 하고 데이터 분산 저장하여 병렬 처리로 성능 높인다.
- DynamoDB는 키 값 형태로 데이터저장.
- MongoDB는 BSON(binary JSON).
- 이런 특징으로 다수의 NoSQL은 조인같은거 지원안함.
- RDBMS대비 유연한 스키마 가진다.