데이터에 대한 요구사항 다양해지면서 그에 맞춰 데이터 설계 방식도 다양해지고있다.

  • 수천만 회원 간의 연결 관계를 분석해서 친구 추천
  • 대량의 데이터를 실시간으로 수집하고 통계를 추출
  • 테라바이트에서 페타바이트 이상의 데이터 처리 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대비 유연한 스키마 가진다.