[CS 스터디] 데이터베이스

한주영·2023년 4월 27일
0

스터디

목록 보기
4/6

인덱스 자료구조

인덱스란?

-데이터베이스 테이블의 검색속도를 향상하기 위한 자료구조
-책의 색인(index)를 해보면 해당 내용이 어디에 있는지 알수있듯이
데이터의 인덱스를 참조하면 데이터가 저장된 레코드의 주소를 알수있는것

장점과 단점

장점
•테이블을 조회하는 속도를 향상시킬수있다
•시스템의 전반적인 부하를 줄일 수있다

단점
•인덱스를 관리하기위해 DB에 추가적인 저장공간이 필요하게 된다
•인덱스를 관리하기위해 추가 작업이 필요하다.
•인덱스를 잘못 사용하면 오히려 성능이 저하될수있다

인덱스가 적용된 컬럼에 Insert, Delete, Update작업 수행시 추가작업필요
•INSERT: 새로운 데이터에 대한 인덱스 추가
•DELETE: 삭제하는 데이터의 인덱스를 사용하지 않는다는 작업 수행
•UPDATE: 기존의 인덱스를 사용하지않음 처리

이처럼 데이터의 수정이 잦은경우 성능이 오히려 낮아짐.
데이터의 인덱스를 제거하는것이 아니라 '사용하지 않음'으로 처리하고 남겨두기에 수정 작업이 많은 경우 추가 저장공간이 필요하게 됨

Index를 사용하면 좋은경우

1.자주검색되는 열
2.테이블을 조인할때
3.데이터를 정렬할때
4.유니크 제약조건을 가진 열
5.범위 검색이 필요한 열
6.자주 수정되지 않는 열

인덱스의 자료구조

•해시 테이블
-해시 테이블은 key,value로 데이터를 저장하는 자료구조로 빠른데이터 검색이 필요할때 유용하다
해시 테이블은 Key값을 이용해 고유한 index를 생성하여 그 index에 저장된 값을 꺼내오는 구조이다.


•B +Tree

-DB의 인덱스를 위해 자식 노드가 2개 이상인 B-Tree를 개선시킨 자료구조.
-리프노드(데이터노드)만 인덱스와 함께 데이터(Value)를 가지고 있고,
나머지 노드(인덱스노드)들은 데이터를 위한 인덱스(Key)만을 갖는다.
-리프노드들은 LinkedList로 연결되어 있다.
-데이터 노드 크기는 인덱스 노드의 크기와 같지 않아도 된다

NoSQL

개념

기존의 관계형 데이터베이스 시스템에서 사용하는 SQL언어를 사용하지 않는 다른형태의 데이터베이스 모델링 기술을 말함

특징

•NoSQL은 대규모 데이터와 실시간 처리에 적합하다
분산시스템과 클라우드 환경에서의 확장성이 뛰어나다
•스키마가 자유로우며 복잡한 쿼리를 처리하기 용이하다
•데이터의 일관성을 유지하기 어렵고 트랜잭션 처리를 지원하지않는 한계점이 있다.
•데이터의 특성과 처리방식에 따라서 적합한 데이터베이스 모델을 선택하여 사용해야 한다.

NoSQL의 종류

1.Key-Value Stores
Key-Value Stores는 간단한 해시 테이블 형태로, 키-값 쌍으로 데이터를 저장한다 가장 대표적인 예로는 Redis와 Amazon DynamoDB가 있다

2.Document Stores
Document Stores는 JSON이나 XML과 같은 문서형태로 데이터를 저장한다. MongoDB와 Couchbase가 대표적인 예이다.

3.Column-Family Stores
Column-Family Stores는 컬럼들을 패밀리라는 단위로 묶어서 저장하는 데이터 모델이다.예로 Cassandra와 HBase가 있다

4.Graph Databases
Graph Databases는 노드와 엣지로 구성된 그래프 형태로 데이터를 저장한다. 예로 Neo4j와 ArangoDB가 있다.

RDB vs NoSQL

RDB(관계형 데이터 베이스)

데이터를 관계형 모델로 표현하여 저장하고, 관리하는 데이터베이스 시스템
테이터는 테이블이라는 2차원적인 구조로 저장되며,테이블은 행과 열로 구성
데이터간의 관계를 표현하기 위해 JOIN과 같은 문법을 사용
ACID트랜잭션을 지원하여 데이터의 일관성과 안정성을 보장

차이점

1.데이터모델링

-RDB는 관계형 데이터 모델로 데이터를 표혀느, 테이블간의 관계를 표현하기위해 JOIN등의 SQL문법을 사용
-NoSQL은 다양한 형태의 데이터 모델을 사용 , 스키마의 자유도가 높고
문법을 사용하지않음

2.확장성
-RDB는 수직적 확장을 통해 성능을 높일수있지만, 분산처리에는 한계가있음
-NoSQL은 수평적 확장을 통해 분산 처리를 지원하며 , 대규모 데이터 처리에 적합하다.

3.일관성
-RDB는 ACID트랜잭션을 지원하며 데이터 일관성을 보장한다
-NoSQL은 일관성을 유지하기 위해 다양한 방법을 사용하지만 ,
모든 NoSQL이 ACID트랜잭션을 지원하지는 않는다

4.데이터크기
-RDB는 대규모 데이터 처리에 한계가 있다
-NoSQL은 대규모 데이터 처리에 적합하며, 수천 테라바이트 이상의 데이터를 저장할 수 있다.

Redis

Redis는 오픈 소스-인 메모리 데이터 구조 저장소이다.
NoSQL데이터베이스로 분류되며 key,value데이터 모델을 사용한다.

이미지 출처:https://devlog-wjdrbs96.tistory.com/374

•디스크 대신 서버의 RAM에 데이터를 저장하므로 매우 빠르다
•데이터베이스,캐시,메세징 브로커 및 세션관리와 같은 용도로 사용된다.
•다양한 데이터구조를 지원, 문자열 ,해시, 목록,세트, 정렬된 세트 등이 있다.
•pub/sub메세징 시스템을 구현하여 클라이언트 간의 메세지 전달을 지원
•다른 데이터베이스와 연동하여 사용할수있다 -> 캐시로 사용될때 매우 효과적이다.
pub/sub메세징은
메세지를 보내고 받는 기능이다 1:1형태뿐만이 아닌 1:N형태로 메세징을 지원한다.
•다른언어와 함께 사용할 수 있는 클라이언트 라이브러리를 제공 ,
이를 통해 다양한 프로그래밍 언어로 Redis를 사용할수있다

Redis의 영속성

Redis는 영속성을 지원한다
Redis의 영속성은 데이터의 지속성을 보장하기 위해
데이터를 디스크에 저장하는 기능이다.
이 기능을 사용하면 Redis가 셧다운 되더라도
데이터를 영구적으로 보관할수있다.

Redis의 영속성 방식

1.RDB(Redis DataBase)
•주기적으로 Redi의 데이터를 디스크에 저장하는 방식
•Redis가 지정된 시간 간격으로 스냅샷을 만들고 , 이를 디스크에 저장합니다.
•백업이나 복원같은 데이터 관리에 적합하다

2.AOF(Append-Only File)
•Redis의 모든쓰기 작업을 로그에 기록한다.
•Redis가 셧다운되기 전에 로그를 디스크에 저장한다.
•데이터의 일관성과 지속성을 보장하며, Redis가 복구되는 경우에도 데이터를 유지

3.Hybrid
•RDB와 AOF방식을 결합한 것이다.
•RDB방식의 이점과 AOF방식의 이점을 모두 취할수 있다.
•Redis가 셧다운될때마다 AOF파일을 RDB파일로 변환한다

profile
백엔드개발자가 되고싶은 코린이:)

0개의 댓글