Computer Science/데이터베이스

[데이터베이스] 비 관계형 데이터베이스 (NoSQL)

excited-hyun 2021. 5. 13. 23:51
반응형

CAP (Consistency, Availability, Partition Tolerance) 이론

1) 일관성(Consistency)

다중 클라이언트에서 같은 시간에 조회하는 데이터는 항상 동일한 데이터임을 보증하는 것.

NoSQL을 사용하는 경우 느슨한 스키마로 인해 일관성이 느슨하게 처리되어 동일한 데이터가 나타나지 않을 수 있음.

느슨하게 처리된다는 것 = 데이터의 변경을 시간의 흐름에 따라 여러 노드에 전파하는 것

 

NoSQL이 분산 노드 간의 데이터 동기화를 위해 사용하는 방법들

- 동기식 방법: 클라이언트에 응답하기 전 모든 노드에 데이터를 저장. 응답시간 느림 but 데이터의 정합성 보장

- 비동기식 방법: 메모리나 임시파일에 기록하고 클라이언트에 먼저 응답한 다음 특정 이벤트 또는 프로세스를 사용해 노드로 데이터를 동기화. 응답시간 빠름 but 쓰기 노드에 장애가 발생하는 경우 데이터 손실 발생.

 

2) 가용성 (Availability)

모든 클라이언트의 읽기와 쓰기 요청에 대해 항상 응답이 가능해야 함을 보증하는 것.

 

몇몇 NoSQL은 가용성을 보장하기 위해 데이터 복제를 사용 : 동일한 데이터를 다중 노드에 중복 저장해 그 중 몇개의 노드가 고장나도 데이터가 유실되지 않게 함. (Master-Slave 방식, Peer-to-Peer 방식이 있음)

Master- Slave 방식: 동일한 데이터를 가진 저장소를 하나 더 생성

Peer-to-Peer: 데이터 단위로 중복 저장

 

3) 네트워크 분할 허용성(Partition rolerance)

지역적으로 분할된 네트워크 환경에서 동작하는 시스템에서 두 지역 간의 네트워크가 단절되거나 네트워크 데이터의 유실이 발생해도 각 지역 내의 시스템은 정상적으로 동작해야함.

 

 

저장 방식에 따른 NoSQL분류 

1) Key-Value Model

가장 기본적인 NoSQL로, 키 하나로 데이터 하나를 저장하고 조회할 수 있는 단일 키-값 구조를 가짐.

복잡한 조회 연산은 지원하지 않으며 고속 읽기와 쓰기에 최적화된 경우가 많음.

하나의 서비스 요청에 다수의 데이터 조회 및 수정 연산이 발생하면 트랜젝션 처리가 불가능해 데이터 정합성을 보장할 수없음. 

사용자 프로필 정보, 웹 클러스터 세션 정보, 장바구니 정보, URL 단축 정보 저장 등에 사용.

ex) Redis

 

2) Document Model

키- 값 모델을 확장한 구조. 키 하나에 하나의 구조화된 문서 저장 및 조회. 논리적인 데이터 저장과 조회방법이 관계형 DB와 유사.

키는 문서에 대한 ID로 표현됨. 저장된 문서를 컬렉션으로 관리하며 문서 저장과 동시에 문서 ID에 대한 인덱스 생성. 이 인덱스를 이용해 O(1)에 문서를 조회할 수 있게됨.

대부분의 경우 B트리 인덱스를 사용해 2차 인덱스 생성. 그러나 이는 크기가 커질수록 새로운 데이터를 입력하거나 삭제할 때 성능이 떨어짐. -> 읽기와 쓰기 비율이 7:3정도인 경우 성능 최상

중앙집중식 로그 저장, 타임라인 저장, 통계 정보 저장 등에 사용 

ex) MongoDB

 

3) Column 

하나의 키에 여러개의 컬럼 이름과 컬럼의 쌍으로 이루어진 데이터 저장 및 조회. 모든 컬럼은 항상 타임 스템프 값과 함께 저장.

대부분의 컬럼 모델이 쓰기와 읽기 중 쓰기에 더 특화됨. 데이터를 먼저 커밋로그와 메모리에 저장한 후 응답하기 대문에 빠른 응답 속도를 제공. 따라서 쓰기 연산이 많은 서비스나 빠른 시간 안에 대량의 데이터를 입력하고 조회하는 서비스 구현에 가장 좋은 성능

채팅 내용 저장, 실시간 분석을 위한 데이터 저장소 등의 서비스 구현에 사용

 

 

 

CS 면접 대비를 위해 아래 깃허브를 기반으로 작성 되었습니다.

github.com/JaeYeopHan/Interview_Question_for_Beginner

 

JaeYeopHan/Interview_Question_for_Beginner

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginner

github.com

 

728x90
반응형