유튜브에서 우연히 코딩애플님의 개발시 데이터베이스 선택 가이드 영상을 보고 흥미를 느껴 한번 조금 더 알아보고 정리해보는 시간을 가졌다.
- key를 고유한 식별자로 key-vlaue 쌍의 집합으로 데이터를 저장한다.
- 저장과 조회에 최적화된 데이터베이스이다.
- key와 value에 모든 데이터 타입을 허용하기 때문에 개발 시 검증 로직이 중요하다.
- 대표적인 key-value database
- 메모리(RAM)에 데이터를 저장한다. 입출력이 잦은 동작에 사용된다.
- 캐싱 : 보통 메인으로 관계형 데이터베이스를 놓고, 자주 사용하는 데이터를 복사해 레디스에 저장해두고 해당 데이터 접근을 레디스에서 하도록 한다.
- pub/sub : 채팅, 푸시 알림 등에 사용된다.
- 영상 스트리밍 : 영상의 메타 데이터(제목, 설명 등) 관리, 실시간 이벤트(댓글, 좋아요) 관리 등에 이용된다.
- 로그인 기록 저장 : 단순한 로그인 기록같은 데이터 저장에 이용된다.
- 테이블 형태로 데이터를 저장한다.
- 트랜잭션이 있어 동작 중 실패 발생 시 데이터가 롤백된다. 따라서 입출력 속도보다 데이터의 정확도, 무결성이 중요할 때 사용한다.
- 대표적인 RDB
- 디스크에 데이터를 저장한다.
- 그러면 mysql은 메모리에 데이터를 저장 안하는가? 0-> 아니다. 대표적으로 쓰기 버퍼는 데이터베이스에 새로운 데이터를 추가하거나 업데이트할 때, 해당 변경 사항을 먼저 메모리 버퍼에 저장한 다음 주기적으로 디스크에 쓰는 방식으로 데이터베이스에 데이터를 기록한다. 이렇게 함으로써 디스크 접근을 최소화할 수 있다.
- 주로 서비스의 메인 데이터베이스로 설정하여 사용한다.
- 입출력 속도보다 데이터의 정확도, 무결성이 중요할 때 사용한다.
- 그래프 이론을 데이터베이스 디자인에 적용시킨 데이터베이스이다.
- 노드에 데이터를 저장하고 노드 사이의 관계를 저장할 수 있다.
- 대표적인 Graph database
- Cypher 쿼리 언어를 사용해 데이터를 조작한다.
- 트랜잭션을 지원하여 데이터의 일관성을 유지하고 안전하게 보관한다.
- 자료 간에 관계, 방향을 중점적으로 저장할 때 사용한다.
- 비행기 노선, sns follow, foller, 감염병 감염 맵, 추천 서비스
- key-value 형태이다.
- 비정형 데이터를 저장할 때 사용한다.
- 폴더 내부에 문서를 json형태로 저장한다.
- RDB의 여러개 테이블을 조인한 데이터를 하나의 document로 저장할 수 있다.
- 대표적인 Document database
- 다른 유형의 문서를 저장할 때 유용하다.
- 블로그 게시판 글 같은 비정형 데이터 저장에 사용된다.
- 데이터 구조가 자주 변경되거나 다양한 종류의 데이터를 저장해야 하는 경우 사용한다.
- 인덱싱 및 전문 검색(Full-Text Search)을 지원하여 데이터를 빠르게 검색할 수 있으므로 입출력이 많은 sns, 실시간 채팅 등에 사용한다.
- 대용량 데이터를 저장하는 요구사항에 수평적 확장이 일어날 가능성이 높은 경우 사용한다.
- 한 row 안에 column들의 집합을 데이터로 저장한다.
- row key를 이용해 column들에 접근한다.
- 대표적인 Column-family database이다.
- 데이터를 여러 노드에 분산 저장하며, 클러스터를 구성하여 데이터를 안정적으로 관리한다. 따라서, 새로운 노드의 추가나 장애 시 데이터의 재분배를 자동으로 처리할 수 있다.
- 분산 저장과 병렬 처리로 빠른 읽기/쓰기가 가능하다.
- 대량의 분산 데이터를 저장하고 처리하는데 사용된다.
- 로그, 센서 데이터 같은 대규모 시계열 데이터를 관리하는데 사용된다.
- 데이터 검색, 분석을 위한 데이터베이스이다.
- 데이터를 검색 가능하도록 색인화하여 저장한다.
- 텍스트를 파싱해서 검색어 사전을 만든 다음, 역색인을 기준으로 데이터를 저장한다.
- 검색 엔진에 사용한다.
- 지도 기반 검색, 위치 기반 애플리케이션 및 지리 정보 시스템에 사용한다.
- 사용자 데이터 기반 추천 시스템에 사용한다.
... 나중에 프로젝트를 할 때, 여러 데이터베이스를 상황에 맞게 고려하고, 해당 데이터베이스에 대해 깊게 공부하는 시간을 가져야겠다.