Database
데이터베이스 종류
StoneSeller
2023. 2. 21. 01:01
1. Key-value Database
▮ Redis
데이터 베이스는 데이터를 물리 디스크에 직접 쓰기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않는다.
그러나 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 커져 느려질 수 있다.
많은 양의 I/O를 발생시키는 데이터의 경우(조회수 같은 카운트 형태) Redis를 사용해 데이터를 캐싱 처리하고, 일정 주기에 따라 RDS에 업데이트하면 RDS에 가해지는 부담을 줄일 수 있다.
cache : 한번 읽어온 데이터를 임의의 공간에 저장하여 다음에 읽을 때는 빠르게 결괏값을 받을 수 있도록 도와주는 공간
▮ Redis 특징
- 데이터를 하드 디스크가 아닌 RAM에 저장(In-memory)
→ 데이터를 디스크에 쓰는 구조가 아니라 메모리에서 데이터를 처리하기 때문에 속도가 빠름 - Key, Value 구조이기 때문에 쿼리를 사용할 필요 없음
2. Relational Database
▮ RDMBS 특징
- 2차원 구조 모델(열 : 속성, 행 : 튜플, 데이터) == 테이블 형식
- ACID(원자성, 일관성, 독립성, 지속성) 트랜잭션 보장
→ 모든 규칙에 따라서 일관성을 가지게 함으로써 오류, 시스템 충돌과 같은 문제가 없는지 확인하여 데이터 무결성, 완전성, 정확성을 보장
→ 정확도가 매우 중요한 서비스라면 해당 데이터베이스를 사용 - Structed Query Language(SQL)를 사용해서 데이터 접근을 하며 CRUD 조작을 허용
- 데이터를 정규화해서 저장
3. Graph Database
- 노드와 관계로 구성된 데이터베이스
- SNS 친구 관계, 추천 서비스 등에서 사용
4. Document Database
- 필드와 값의 형태로 구성된 데이터를 JSON 포맷으로 관리
- 값을 저장하기 전에 schema를 별도로 정의하지 않으며, 문서를 추가하면 그게 schema가 됨
- 정규화 없이 사용
- 분산처리가 잘 되기 때문에 SNS, 실시간 채팅 등에 사용
→ 그러나 일관성이 떨어질 수 있음
5. Column-family Database
- Column과 Row와 같이 Relation Database와 동일한 용어를 사용하여 스키마를 정의
- 그러나 테이블 간 조인을 지원하지 않음
RDB의 경우 고객의 기본 정보 테이블(이름, 주소 등)과 고객의 주문 정보 테이블 처럼 나누어서 저장하고 조인을 통해 객체의 정보를 활용하지만,
Column Family DB는 비정규화되어있기 때문에 한 객체와 관련된 모든 정보를 위 그림처럼 단일 Row에 넣어서 보관함 (수백만개의 컬럼을 보관할 수 도 있음) - 대용량 데이터, 읽기와 쓰기 성능, 고가용성을 위해 설계
- 아래와 같은 경우에 사용함
1. 데이터베이스에 쓰기 작업이 많은 애플리케이션
2. 지리적으로 여러 데이터 센터에 분산되어 있는 애플리케이션
3. 복제본 데이터가 단기적으로 불일치하더라도 큰 문제가 없는 애플리케이션
6. Search Engine
- index 보관에 특화
- RDB의 경우, CRUD를 하기 위해서는 클라이언트에서 관계형 DB가 있는 서버에 연결을 맺어 SQL을 날리는 방식,
엘라스틱서치의 경우에는 데이터를 CRUD하기 위해서 RESTful API 방식 이용 - 실시간/추천 검색어 등 서비스에 활용
728x90