
RDB
관계형 데이터베이스(Relational Database)란 데이터가 중복되지 않도록 하여 테이블의 역할이 명확하게 구분하고 테이블 간에는 외래키(FK)를 사용하여 데이터를 공유하는 것으로 서로 관계를 맺도록 설계한 데이터 모델이다. 데이터의 중복이 허락되지 않기 때문에 Object 안에 Object를 넣을 수 없어 두 개의 테이블의 데이터를 조인해서 사용한다.
NoSQL
비관계형 데이터베스(NoSQL)는 데이터 중복이 가능하여 Object안에 Object를 넣을 수 있다. 그렇기 때문에 컬렉션과 컬렉션 간에 관계가 존재하지 않는다. 이는 데이터를 Select할 때 매우 빠른 속도를 자랑한다. 하지만 데이터의 중복으로 인해 각각의 컬렉션의 데이터를 동기화하는데 시간이 걸린다. 이를 커버하는 기술이 바로 샤딩으로 MongoDB에서 이 기술을 제공하고 있다.
RDB vs NoSQL
SQL 쿼리 언어를 사용한다.
테이블마다 스키마(Schema)를 정의해야한다.
데이터 타입과 제약으로 데이터의 정확성이 보장된다.
속도보다 트렌젝션 시의 ACID가 중요하다.
수직적 확장(Scale up)에 적합하다
데이터 중복이 없어 쓰기 속도가 빠르다
비용이 많이 들어 확장성이 좋지 않다.
Undo와 Redo를 제공한다.
MariaDB, MySQL, Oracle 등이 있다.
👉 언제 사용하면좋을까?
앱의 여러 부분에서 관련된 데이터가 비교적 자주 변경되는 경우 (NoSQL이라면 항상 여러 컬렉션을 수정해야한다.)
명확한 스키마가 중요하며, 데이터 구조가 극적으로 변경되지 않는경우
데이터의 일관성, key를 기준으로 쿼리를 작성하는게 중요, join, FK, index 체크 시
👉 언제 사용하면좋을까?
정확한 데이터 요구사항을 알 수 없는 경우
읽기(read)처리를 자주하지만, 데이터를 자주 변경하지 않는 경우
(한번의 변경으로 수십개의 문서를 수정할 필요가 없는 경우)
데이터베이스를 수평적으로 확장해야하는 경우
(막대한 양의 데이터를 다뤄야하는 경우, 읽기 쓰기 처리량이 큰 경우)
구매 내역, 게임 로드 등 수정될 일이 거의 없는 경우