일반적으로 NoSQL은 관계형 DB에 비해서 네가지 정도의 장점을 제공한다.
1) 수평확장이 가능하다:RDB와 달리 NoSQL은 수평적 확장이 가능하다.(관계형 DB는 복제본으로 확장 가능하지만, 쓰기 확장이 어렵다)
2) 분산 구조가 가능하기 때문에, 장애 허용성이 높다.
3) 스키마가 없기 때문에 데티어 모델을 필요에 따라 유연하게 변경한다.
4) 비 정규화된 모델링이라서 조인에 따른 부하가 없다.
5) 쿼리 처리 속도가 빠르다. 여러 테이블에 분산돼있지 않고, 테이블 하나에서 처리하기 때문에 일부 데이터 모델은 초당 수백만건의 트랜잭션을 처리한다.
단점으로는
1) 데이터 일관성을 보장하지 못한다.(특히 스키마가 없기 때문에 애플리케이션 단에서 제대로 만들어야 함)
2) sql처럼 데이터 중복을 제거하지 않아 크기가 빠르게 커질 수 있다.
결제, 계좌간 송금, 주식 거래 등의 시나리오에서는 굉장히 엄격한 ACID가 필요하다. 계좌 잔액 $100에서 $90을 인출하려고 할 때, 인출 전에 배우자가 $80을 인출해 마이너스 잔액이 되는 상황을 방지해야 한다.
관계형 데이터베이스는 우수한 ACID와 데이터베이스 잠금 도구를 제공한다. MongoDB도 ACID를 도입하고 있지만, 강력한 일관성이 없는 분산 샤드 기반 시스템에서는 여전히 피하는 것이 좋다.
물론, 트랜잭션이 엄격하게 요구되지 않은 애플리케이션에서는 NoSQL을 함께 쓰는 것도 좋다.
(참고로 몽고DB같은 경우는 ACID 트랜잭션을 제공한다.)
참고자료