on
DB Guide
데이터 베이스 선택 가이드
Key-value Database
데이터를 키, 벨류 형식으로 저장
-
key:이름, value:홍길동
-
단순해서 보조용으로 사용
redis (Key-value 이용)
데이터를 하드디스크에 저장하지 않고 RAM에 저장
-
따라서 속도가 빠르다.
-
메인 DB를 두고, redis에 복사본을 만든다.
-
캐시, 채팅을 위한 pub/sub, 영상 스트리밍, 로그인 기록 저장 등에 쓰인다.
Relational Database
테이블 형식으로 저장한다
상품명 | 가격 | 색상 |
셔츠 | 6000 | Red |
바지 | 7000 | Blue |
양말 | 8000 | Green |
-
Oracle, MySQL, SQL Server, PostgreSql 등
-
데이터 정규화를 해야한다. -> 데이터 중복을 피한다. -> 중복데이터는 다른 테이블로 분리한다.
-
ACID Transaction 기능
-
입출력 속도보다 데이터 정확도가 중요한 경우 사용
-
관계형 데이터 베이스의 이름이 관계를 잘 표현 한다기 보다, 수학의 행렬에서 기인함
Graph Database
관계를 표현할 때 사용
-
Sparsity, neo4j, OrientDB, ArangoDB 등
-
노드 끼리 관계 지정가능, 자료관의 관계, 방향을등 지정할때 사용
-
비행기 노선, SNS 친구관계, 코로나전염맵, 추천서비스 등에 사용
-
SQL이 아닌 Graph Query Language 사용
Document Database
정규화를 하지 않는다 (데이터의 중복 제거를 하지 않음)
-
Relational Database보다 좀더 다유로움
-
mongoDB, CouchDB, Cloud Firestore 등
-
JSON형태로 저장
-
관계형 데이터 베이스와는 다르게 어떤 데이터를 저장할지 미리 정의 하지 않아도 된다.
-
데이터 분산처리에 매우 유용함
-
SNS, 실시간 채팅, 게시판, 온라인 게임 등
-
데이터의 일관성이 떨어질 수 있음
Column-family
관계형 데이터 베이스와 유사하나 유연함
-
cassandra, apache HBASE, Google Cloud Bigtable 등
-
테이블 행마다 컬럼이 달라도 상관없음
-
sql이 아닌 독자전인 문법을 사용해야 함 -> cassandra의 경우 Cassandra Query Language
-
정규화를 하지 않음
-
분산처리에 유용함
-
데이터 일관성이 부족함
Search engine
검색용 인덱스를 보관하기 위한 데이터 베이스
-
elastic, Amazon CloudSearch, Google Cloud Search 등
-
index 보관에 특화됨