NoSQL
✔️ 개념
"Not Only SQL" 또는 "Non-Relational Operational Database"
: 비관계형 데이터 베이스로, 전통적인 관계형 데이터베이스(RDBMS)와는 달리, 비정형 데이터 또는 반정형 데이터를 효율적으로 저장하고 처리하기 위해 설계된 데이터베이스 시스템
✔️ 장단점
- 장점
· 유연한 데이터 모델 : 스키마가 유동적이므로 데이터 구조 변경에 용이
· 수평적 확장(확장성) : 서버 추가하여 처리 능력 쉽게 늘릴 수 있음
· 빠른 쿼리 : JOIN 연산이 필요없어서 쿼리 속도가 빠름
· 다양한 데이터 유형 지원 : JSON, 문서, Key-Value, 그래프 등
· 비용 효율성 : 분산 처리와 병렬 처리가 가능하여 비용이 저렴
- 단점
· 데이터 일관성 : 데이터 일관성이 항상 보장되지는 않음 ('최종적 일관성')
· 트랜잭션 미지원 : ACID 트랜잭션을 지원하지 않음
· 표준화 부족 : SQL과 같은 표준적인 쿼리 언어가 없으므로, DB마다 다른 인터페이스 제공
✔️ 종류
● Key-Value Database
- 간단한 key-value 형태로 데이터 저장
- 빠른 데이터 접근과 캐싱에 적합
- Redis, Oracle NoSQL DB
● Document Database
- JSON, BSON 등의 문서 형태로 저장
- 유연한 데이터 구조, 중첩된 데이터 저장 가능
- MongoDB, CouchDB, Firebase Firestore
● Wide-Column Database
- key-value 구조이지만, 값이 여러 개의 칼럼 그룹으로 구성됨
- 대규모 데이터 처리에 적합, 분산 저장 및 빠른 검색 가능
- Cassandra, Hbase, ScyllaDB
● Graph Databse
- 노드(node)와 관계(edge)를 저장하며, 데이터 간의 관계를 중심으로 설계되어 관계형 데이터 탐색에 최적화됨
- 복잡한 관계형 데이터 모델링 가능, 추천 시스템 등에 활용
- Neo4j
✔️주요 디비별 특징
MongoDB
● 빠른 데이터 처리 → 메모리 기반 접근 & 인덱스 활용
● 문서 기반 저장 → JSON과 유사한 BSON 형식으로 저장
● 강력한 검색 기능 → 다양한 필터, 정렬, 집계(Aggregation) 지원
● 메모리 사용량이 많음 → 인덱스 및 캐싱으로 인해 RAM 사용 증가
● 일관성 보장 어려움 → NoSQL 특성상 일관성보다는 가용성 위주
Redis
Remote Dictionary Server, 오픈 소스 기반의 인-메모리(In-Memory) 데이터 구조 저장소.
데이터베이스, 캐시(데이터베이스의 반복적인 조회 줄임), 세션 관리(웹 어플리케이션에서 사용자 세션 정보 저장), 메세지 큐 및 대기열(비동기 메시징 시스템으로 활용), 실시간 분석(빠른 읽기/쓰기 성능으로 실시간 데이터 분석에 적합)
● 인 메모리 → 데이터 베이스를 메모리에 저장하여 빠른 읽기 및 쓰기 성능 제공
● 다양한 데이터구조 → 문자열, 해시, 목록, 집합, 정렬된 집합, 비트맵, 스트림 등 다양한 데이터 타입을 지원
● 싱글 스레드 방식 → 한 번에 하나의 명령어만 처리하여 원자적 연산을 지원
● 고가용성 및 클러스터링 → Redis Sentinel과 Redis Cluster를 통해 고가용성과 자동 파티셔닝 기능을 제공
Firebase realtime database
NoSQL 기반의 클라우드 호스팅 데이터베이스, 데이터를 JSON 형식으로 저장. 이 데이터베이스는 연결된 모든 클라이언트에 실시간으로 데이터를 동기화하여, 실시간 채팅, 다중 플레이어 게임 등과 같은 실시간 애플리케이션에 적합
● 실시간 데이터 동기화 → 실시간으로 데이터가 변경될 때마다 연결된 모든 기기가 업데이트 수신
● 오프라인 지원 → 앱이 오프라인 상태일 때도 데이터를 로컬에 유지하고, 네트워크에 다시 연결되면 동기화
● 서버 필요 X → 앱에서 직접 접근할 수 있어 별도의 서버 필요없음
● 데이터 구조 → 데이터를 하나의 큰 JSON 덩어리로 저장함, 깊고 좁은 쿼리 제공
CouchDB
Apache CouchDB는 NoSQL 기반의 문서 지향형 데이터베이스로, 데이터를 JSON 형식으로 저장. 스키마가 정의되지 않은 상태로 데이터를 저장할 수 있어, 다양한 형태의 데이터 유연하게 관리가능
● 문서 지향형 데이터 모델 → JSON 문서로 데이터를 저장하며, 각 문서는 고유한 ID를 가지고 있음
● 스키마 유연성 → 스키마가 정의되지 않아 데이터 구조 변경이 용이
● 오프라인 지원 → 장치가 오프라인 상태일 때도 데이터를 저장하고, 네트워크에 다시 연결되면 동기화
● RESTful HTTP API → HTTP 프로토콜을 통해 CRUD 작업을 수행할 수 있음
● 쿼리 제한 → 복잡한 쿼리 지원하지 않음, MapReduce 기반의 뷰 사용해야함
● 성능 → 대규모 데이터 처리 시 성능이 떨어질 수 있음