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대비 유연한 스키마 가진다.