수평적 확장성 vs 수직적 확장성
확장성 Scalability
NoSQL은 서버만 늘리면 해싱은 접근 속도가 O(1)이다.
O(1)을 보장하면서 컴퓨터 대수를 막 늘릴 수 있기 때문에 서버 확장하는데 안정적으로 스케일 업 할 수 있다.
반면에 수직적 확장성 (돈을 한 컴퓨터에 쏟아 붓는 방식)
SQL vs 쿼리 언어 없음
여러분들의 데이터가 계속 조인 해야하는 데이터면 NoSQL보다 SQL이 좋음.
여러분의 데이터가 쇼핑몰처럼 유저 데이터, 상품 데이터 등 항상 조인 해야한다면,
NoSQL은 시스템 유지 보수가 어려움.
쇼핑몰처럼 정형적인 데이터를 관리하려면 RDB를 쓰고 Facebook과 인스타그램 같이 유저가 폭팔적으로 증가할 수 있고 간단한 데이터를 관리하는 건 NoSQL이 잘 어울림.
RDB는 강한 스키마 vs NoSQL 자유로운 스키마
테이블 정의에 부합하지 않으면 INSERT, UPDATE 등 할 수 없다. 거부를 함.
NoSQL은 이름, 성별 이렇게 있는데 아.. 나이도 넣어볼 까? 하고 더큐먼트에 필드를 추가하면 자유롭게 추가가 됨.
RDB 같은 경우는 인덱스를 걸면 탐색의 시간이 log(n)이 돼서 검색이 빠름.
NoSQL 같은 경우는 인덱스를 걸면 비효율적이라 key 기준으로 커리를 작성하는 게 중요함.
여러분 서비스가 외부 키로 Join을 자주하거나 인덱스를 사용한다면 RDB를 사용하는 게 좋음.
RDB는 ACID를 지향 즉, 트렌젝션 단위로 깔끔하게 처리한다.
금융 거래할 때 트렌젝션 기반이 유리함.
NoSQL은 insertionTime에 막 넣고 나중에 시간이 지나고 데이터 조회를 할 수 있다.
insertion에 빠르고, 읽어드리는 건 느리다.
적절한 환경에서 데이터 베이스를 사용해야함.
https://www.youtube.com/watch?v=CjsVx9sARDU - 크리스 송
- NoSQL의 대표인 MongoDB와 Memcached의 차이는?