DB/다양한 DB들

다양한 DB

doriver 2023. 12. 26. 14:18

 

일반적으로
Relational Database, Document Database 많이  사용

정확도 필요없고 입출력 매우 잦으면 Document Database
정확도와 일관성이 중요하면 Relational Database
( 확장방법에 따라 아닐수도 )

 


NoSQL( Not Only SQL )

수평적 확장( 장비의 수를 늘리는 거 )을 바탕으로,대량의 데이터와 컴퓨팅 부하를 처리하는 것을 가능하게 하였다. 
데이터 구조를 미리 정의할 필요가 없기 때문에 비형식적인 데이터를 저장하는데 용이

 

Key-Value , Document
Redis , 몽고디비(MongoDB)

 

NoSQL은 데이터를 분산저장하기 때문에, 
한 영역에 Update가 생길 시 실시간으로 다른 영역에 반영하는것이 쉽지않다.
그렇기 때문에, 
꼭 최신은 아닐 수 있지만 업데이트가 되기 전까지는 가지고 있는 최신의 데이터를 반환한다는 
"Eventual Consistency" 의 개념을 사용한다.

 

Key-value Database

 

데이터를 key-value형태로 저장
서브용 DB로 사용

 

redis

데이터를 하드디스크에 저장하지 않고, 1차적으로 RAM에 저장해줌
( 하드에 백업은 해둠, RAM이 하드보다 훨씬 빠르기 때문 )

자주쓰는 데이터 캐싱, 채팅을위한 pub/sub


메인DB에서 자주 사용되는 데이터들은 redis에 추가로 복사해둠
데이터 필요한경우 redis에서 꺼내서 보내주는 경우들이 있음
> 빠른 서비스 가능


 

 

 

 

Relational Database

 

역사와 전통이 있음
하나의 행단위로 데이터를 보관

보통 데이터를 정규화해서 저장
( 데이터 중복제거 위해, 테이블1개를 2개 이상으로 만들기도 )

Transaction기능
( 돈거래같은 중요한 기능 구현에 사용 , 실패시 롤백 가능 )

입출력 속도보다, 데이터 정확도가 매우 중요한 경우 사용

 

 

 

Graph Database

ex) neo4j

관계를 주로 DB에 저장

노드라는걸 만들고, 노드안에 데이터들을 저장
노드끼리 어떤 관계인지도 기록

코로나 전염맵, 추천서비스 등등에 사용

 

 

Document Database

ex) mongoDB , Firestore

collection 이라는 폴더같은걸 하나 만들고
그 안에 document라고 부르는 파일들을 만들어서 Json형태로 저장

 

관계형DB랑 다르게 어떤 데이터를 저장할지 미리정의해 놓을 필요도 없고
갑자기 기존에 없던 field( ex 연락처 )를 넣어도 에러 없음

 

보통 중복데이터 제거안함( 정규화 없이 쓰는게 일반적 )

 

분산을 염두해두고 만들어진 DB라 
DB를 분산시켜 놓는게 쉬움( 분산처리를 잘해줌 )


데이터 입출력 많은 서비스들에 활용( SNS, 채팅 등등 )

 

 

 

 

 

Column-family Database

 

 

관계형 DB처럼 표형태로 데이터저장하는데 유연하게

 

정규화(중복제거) 없이 쓰는게 일반적

복제, 분산 잘함( 분산처리 )

 

 

 

 

 

 

Search engine

ex) elastic Search , amazon cloudSearch, google cloudSearch

index보관용으로 주로 사용
( index : 데이터 검색을 빠르게 할수있게 도와주는 색인, 목차 )

 

기존DB에서 데이터 뽑아서 넣어줌

검색요청에대해 index이용해 빠르게 처리
실시간 검색어, 추천 검색어 등등

 

 

 

 

 

https://www.youtube.com/watch?v=ZVuHZ2Fjkl4