공부할 것 !

NoSQL

sejin2 2024. 5. 8. 11:27

- RDBS  : 새로운 기능을 추가하기 위해 컬럼 추가 => 스키마 변경이 필요

기능이 계속 늘어날 때마다 컬럼이 추가되고, 스키마 변경이 필요한데, 사용량이 많아질 경우 컬럼을 계속 추가하는 것은 비효율적이고, 위험한 작업 ( 서버 부담 ) 

유연한 확장성이 부족하고, 중복 제거를 위해 정규화를 진행하며 전체 데이터를 조회하고 싶을 때 JOIN을 해야 함 ( 응답시간이 길어짐 )
RDB는 기본적으로 한 대의 컴퓨터에 저장 

2000년대 초/중반 
SNS의 이용 증가로 트래픽 증가, 비정형 데이터의 증가 ( 예상할 수 없는 데이터 )

그러면서 NoSQL이 등장하게 됨. Not Only SQL

NoSQL의 특징

1. flexible schema : application 레벨에서 스키마 관리가 필요

db. createCollection("student")

MongoDB는 JSON 형태로 데이터 넣어줄 수 있음
테이블이 아닌 collection이라 함


기존 RDBS에서 테이블 생성시  

create table student (
    id INT PRIMARYKEY,
    name VARCHAR(20),
    ...
);

2. 중복 허용 ( join 회피 )

: 주문 정보를 join할 필요없이 조회해오면 된다. application 레벨에서 중복된 데이터들이 모두 최신 데이터를 유지할 수 있도록 관리해야 함

3. scale-out이 용이

: 서버 여러 대로 하나의 클러스터를 구성하여 사용

4. ACID의 일부를 포기하고, high-throughput, low-latency 추구

: 금융/결제/예약 시스템처럼 consistency가 중요한 환경에서는 사용하기가 조심스러움

Redis

: 메모리를 사용하는 key-value 형태로 데이터를 저장하는 데이터베이스이기도하고, 캐시로도 사용되고 다양한 목적으로 사용된다. 

redis > SET name easycode
"OK"

redis > Get name
"easycode"

다양한 값들이 저장된다 => strings, list, sets, hashes, sorted sets
고가용성 지원

redis는 memory cache라서 DB에 비해 매우 빠르다. ( 트래픽에 대응 )