diff --git "a/\352\270\260\354\210\240\354\204\270\353\257\270\353\202\230/_posts/2024-08-20-nosql.md" "b/\352\270\260\354\210\240\354\204\270\353\257\270\353\202\230/_posts/2024-08-20-nosql.md" new file mode 100644 index 0000000..9b535af --- /dev/null +++ "b/\352\270\260\354\210\240\354\204\270\353\257\270\353\202\230/_posts/2024-08-20-nosql.md" @@ -0,0 +1,110 @@ +--- +layout: post +title: NoSQL +author: 김영래 +categories: 기술세미나 +banner: + image: assets/images/post/2023-11-05.webp + background: "#000" + height: "100vh" + min_height: "38vh" + heading_style: "font-size: 4.25em; font-weight: bold; text-decoration: underline" + tags: [NoSQL, 기술 세미나] +--- + + +# NoSQL이란? +![nosql1](https://github.com/Kernel360/blog-image/blob/main/2024/0820/nosql1.jpg) + +### 1. 비관계형 데이터 모델 +- 유연한 스키마 : RDBMS 처럼 정해진 스키마를 바탕으로 데이터를 입출력 할 때 형태가 정해지지 않는다. +- 다양한 데이터 모델 : JSON, XML 등의 데이터 형식으로 저장할 수 있다. +### 2. 확장성 +- 수평 확장 : 샤딩을 통한 분산 저장을 하는 NoSQL 특성 상 성능 확장을 위해 단순히 서버 컴퓨터의 수를 늘리는 방식이 가능하다. + - 샤딩 : 데이터를 조각내 분산 저장하는 데이터 처리 기법 + + ![nosql2](https://github.com/Kernel360/blog-image/blob/main/2024/0820/nosql2.png) + ![nosql3](https://github.com/Kernel360/blog-image/blob/main/2024/0820/nosql3.png) + +### 3. 고가용성 및 장애 복구 +- 자동 복제 : 데이터 복제 및 분산 저장을 통해 높은 가용성과 장애 복구가 가능하다. +- 고가용성 : 시스템이 지속적으로 안정적인 동작을 할 수 있도록 보장하는 것 + - CAP 이론에서 분산 시스템은 Consistency, Availability, Partition Tolerance 중 두 가지 특성을 만족 가능 -> NoSQL은 Consistency를 포기 + + ![nosql4](https://github.com/Kernel360/blog-image/blob/main/2024/0820/nosql4.png) + +### 4. 높은 성능 +- Key-Value 에 기반한 DB이기 때문에 기본적으로 읽기와 쓰기에 빠른 속도를 가진다. +- 디스크 기반인 RDBMS와 달리 NoSQL은 메모리 기반이기 때문에 빠른 속도를 가질 수 있다. + + +# NoSQL 종류 +### 1. Key-Value DB +- Key, Value의 쌍인 배열 구조의 데이터가 저장되는 가장 기본적인 형태 +- Key-Value Store는 단순한 조회 질의를 이용한 대량의 데이터 추출에 적합 +- ex. Redis, Oracle NoSQL DB +### 2. Wide Column Store +- Big Table DB라고도 하며, Key Value에서 발전된 형태의 Clumn Family 데이터 모델로, 테이블 안에 테이블을 포함할 수 있으며, 데이터를 수직적으로 쌓아가는 방식 +- Key-Value Store의 확장으로, Row Key와 Column Name의 조합으로 값을 저장 +- ex. Hbase, Cassandra, GoogleBigTable, Vertica +### 3. Document DB +- Key Value 에서 확장된 형태로 Document라는 구조화된 데이터 타입(JSON, XML)인 Collection 데이터 모델 +- Document DB는 내부 구조에 의존하여 데이터를 처리하며, 추가 최적화를 위해 메타 데이터 추출을 사용 +- ex. MongoDB, CouchDB, Riak, Azure Cosmos DB +### 4. Graph DB +- Nodes, Relationship 데이터 모델 +- 데이터를 그래프 구조로 저장하며, 노드와 엣지를 사용하여 데이터 간의 관계를 표현 +- 그래프 데이터베이스는 연결된 데이터 간의 관계 분석 및 탐색에 적합 +- ex. Sones, AllegroGraph, neo4j, BlazeGraph, Orient DB + +![nosql5](https://github.com/Kernel360/blog-image/blob/main/2024/0820/nosql5.png) + + +# NoSQL 장단점 +### 1. 장점 +- 확장성 + - NoSQL 데이터베이스는 수평적 확장을 지원하여, 데이터베이스의 용량 증가 용이 + - 클라우드 환경에서 NoSQL 데이터베이스는 추가 서버를 쉽게 추가하여 확장 가능 +- 가용성 + - NoSQL 데이터베이스는 분산 아키텍처를 사용하여, 일부 서버가 오프라인 상태가 되어도 데이터베이스의 나머지 부분 계속 작동 가능 + - 고가용성 기능을 통해 데이터베이스의 신뢰성 보장 +- 고성능 + - NoSQL 데이터베이스는 대량의 데이터를 빠르게 처리할 수 있으며, 실시간 응답이 필요한 애플리케이션에 적합 + - 다양한 데이터 형식을 지원하여, 구조화되지 않은 데이터를 효율적으로 처리 +- 유연성 + - NoSQL 데이터베이스는 동적 스키마를 사용하여, 데이터 구조를 유연하게 변경 + - 다양한 데이터 모델을 지원하여, 애플리케이션의 요구 사항에 맞게 데이터를 저장 +- 비정형 데이터 + - 설계 비용 감소 + - 정의된 구조가 없어 정형화되지 않은 데이터 + - ex. 동영상, 오디오 ,사진, 보고서, 문서 등 +- 분산 시스템 + - RDBMS에 비해 저렴한 비용으로 분산 처리 및 병렬 처리 가능 +- 빅데이터 처리에 효율적 + +![nosql6](https://github.com/Kernel360/blog-image/blob/main/2024/0820/nosql6.png) + +### 2. 단점 +- 데이터 업데이트 중 장애가 발생하면 데이터 손실 발생 가능성 +- 많은 인덱스를 쓰려면 충분한 추가 메모리가 필요하다. + - 인덱스 구조가 메모리에 저장되기 때문이다. +- 데이터 일관성이 항상 보장되지 않는다. + - 최종적 일관성 지향 + - 모든 업데이트가 시간이 지나면서 모든 노드에 전파되어 결과적으로 모든 노드가 일관된 상태가 되는 것을 보장하는 개념 + - 특정 시간에는 데이터가 일관되지 않을 수도 있다. + - 가용성, 분할용인, 속도 를 위해 희생 + + +# NoSQL 사용 분야 +### - 실시간 빅데이터 처리 +- Amazon + - DynamoDB : 전자 상거래 플랫폼 등을 위해 실시간 빅데이터 처리\ + + ![nosql7](https://github.com/Kernel360/blog-image/blob/main/2024/0820/nosql7.png) +### - 소셜 네트워크 서비스 +- Instagram + - Cassandra : 대규모 데이터에 대한 빠른 쓰기와 확장성이 요구되는 피드 데이터, 시간에 따른 데이터 저장 등에 사용, 데이터 고가용성 및 장애 복구가 큰 장점 + + ![nosql8](https://github.com/Kernel360/blog-image/blob/main/2024/0820/nosql8.png) + +