[TIL] 2024-10-08 (NoSQL/ADsP)TIL (2024)/2024.102024. 10. 9. 01:16
Table of Contents
728x90
Today I Learned (2024-07-12)
목차
오늘 공부한 내용
1. KDT (NoSQL)
NoSQL
비관계형 데이터베이스 유형
높은 확장성과 가용성이 장점
실시간 웹 애플리케이션 및 빅데이터에 널리 사용
NoSQL 데이터베이스 유형
- 키 값
- 가장 유연한 NoSQL 데이터베이스 유형
- 애플리케이션이 값 필드에 저장된 모든 데이터를 제약 없이 완벽하게 제어할 수 있다.
- 문서
- 문서 저장소 또는 문서 지향적 데이터베이스라고 불림.
- 반구조적 데이터의 저장, 검색, 관리에 사용
- 그래프
- 데이터를 노드 및 노드 간 연결을 보여주는 관계로 구성
- 넓은 열
- 테이블, 행, 열 형식으로 데이터를 저장 및 관리
수직 확장(Scale Up) 및 수평 확장(Scale Out)
- 테이블, 행, 열 형식으로 데이터를 저장 및 관리
- 키 값
수직 확장(Scale UP)
- 개념 : 단일 서버의 성능을 향상시키는 방식. 서버의 메모리, CPU 등의 업그레이드를 통해 처리 능력을 높임.
- 장점 : 관리가 간편함. 단일 서버만 관리하면 되기 때문에 데이터 일관성 유지 비용이 적음
- 단점 :
- 확장의 한계가 존재
- 업그레이드 중 다운타임이 발생할 수 있음
- 고성능 장비로 업그레이드할수록 비용이 증가
- 적합한 환경 : 데이터 일관성과 무결성이 중요한 데이터베이스 서버에 적합
수평 확장(Scale Out)
- 개념 : 여러 대의 서버를 추가하여 작업을 분산시키는 방식
- 장점 :
- 이론적으로 무한 확장이 가능함.
- 서버 수를 유동적으로 조절 가능하여 유연함
- 단점 :
- 클러스터링 작업에 추가 비용과 기술적 관리가 필요함.
- 네트워크 상황에 따라 성능 저하 가능성
- 적합한 환경 : 웹 서비스와 같이 유저 유저 수요가 변동적인 시스템에 적합
NoSQL 데이터베이스별 특징
- Key-value DataBase
- 특징 : 키-값 쌍으로 데이터를 저장. 단순한 데이터 모델에 적합
- 예시 : Redis, DynamoDB
- 사용처 : 캐시, 사용자 세션 데이터 저장
- Document DataBase
- 특징 : JSON, XML 등 문서 형식으로 데이터 저장. 스키마 유연성 제공.
- 예시 : MongoDB, CouchDB
- 사용처 : 복잡한 데이터 구조의 웹 애플리케이션
- Column Family DataBase
- 특징 : 대용량 데이터 처리에 적합. 컬럼을 그룹으로 묶어 저장.
- 예시 : Cassandra, HBase
- 사용처 : 분산 데이터베이스, 대규모 읽기/쓰기 작업
MongoDB
MongoDB 는 NoSQL 데이터베이스로, 비정형 데이터를 저장하기에 적합함. JSON 형식의 문서를 저장하며 수평적 확장(Scale Out)에 용이
데이터 모델 : 문서 기반(Document-Oriented) 저장소로, JSON 또는 BSON(Binary JSON) 형식을 사용함
특징 :
- 스키마리스(Schemaless) : 데이터 구조가 고정되지 않음. 유연하게 필드와 데이터를 추가할 수 있음
- 수평 확장성 : 샤딩(sharding)을 통해 대규모 데이터 분산 저장 및 관리 가능.
- 복잡합 쿼리 가능 : SQL과 유사한 쿼리 언어를 제공하여 데이터 필터링, 정렬, 조인 등의 작업을 지원함.
적용 사례 :
- 로그 데이터 저장
- 소셜 미디어 포스트 관리
- 복잡한 데이터 구조를 가진 애플리케이션
비교 연산자 :
- $gt(>) : Great Than (크다)
- $lt(<) : Less Than (작다)
- $gte(>=) : Great Than or Equal (크거나 같다.)
- $lte(<=) : Less Than or Equal (작거나 같다.)
논리 연산자 :
- $and(&) : 여러 조건을 모두 만족하는 문서 조회
- $or(|) : 하나의 조건이라도 만족하는 문서 조회
- $not(^) : 조건을 만족하지 않는 문서 조회
기타 연산자 :
- $in : 특정 값들 중 하나와 일치하는 문서 조회
예시코드(CRUD)
Create(문서 삽입)
db.collection.insertOne({ "name": "John", "age": 30 }); db.collection.insertMany([{ "name": "Jane", "age": 25 }, { "name": "Tom", "age": 35 }]);
Read(문서 조회)
db.collection.find({ "name": "John" }); db.collection.find({ "age": { $gt: 25 } });
Update(문서 수정)
db.collection.updateOne({ "name": "John" }, { $set: { "age": 31 } }); db.collection.updateMany({ "age": { $lt: 30 } }, { $inc: { "age": 1 } });
Delete(문서 삭제)
db.collection.deleteOne({ "name": "John" }); db.collection.deleteMany({ "age": { $gte: 35 } });
Redis
인메모리 데이터 구조 서버로, 매우 빠른 읽기/쓰기 속도를 자랑함. 주로 캐시(Cache)로 많이 사용되지만, 키-값 저장소로도 활용 가능함.
데이터 구조 : 키-값(Key-Value) 기반 저장소로, 다양한 구조(Set, List, Hash 등)를 지원함
특징 :
- 인메모리(In-Memory) : 모든 데이터를 메모리에 저장하므로 매우 빠름
- 다양한 데이터 구조 지원 : 문자열, 해시, 리스트, 셋, 정렬된 셋 등 다양한 자료형을 사용 가능
사용 사례
- 캐시 시스템
- 세션 관리
- 실시간 순위 관리
예시코드(CRUD)
Create(데이터 삽입)
client.set('user:name', 'Alice') # 문자열 저장 client.hset('user:1000', 'name', 'Bob') # 해시 저장
Read(데이터 조회)
name = client.get('user:name') print(name.decode('utf-8')) # Alice # 해시 조회 user_name = client.hget('user:1000', 'name') print(user_name.decode('utf-8')) # Bob
Update(데이터 수정)
client.set('user:name', 'Charlie') # 기존 키에 새 값 저장 client.hset('user:1000', 'name', 'David') # 해시 필드 값 수정
Delete(데이터 삭제)
client.delete('user:name') # 키 삭제 client.hdel('user:1000', 'name') # 해시 필드 삭제
2. ADsP (통계분석)
챕터 2. 통계분석
어려웠던 내용
- ADsP 외울거
궁금한 내용과 부족한 내용
- 데이터베이스 외우기
- SQL 쿼리
느낀 점
- 쿼리를 잘 만들고 싶다. 느려..
'TIL (2024) > 2024.10' 카테고리의 다른 글
[TIL] 2024-10-10 (SQL/ADsP) (0) | 2024.10.11 |
---|---|
[TIL] 2024-10-09 (SQL/ADsP) (0) | 2024.10.10 |
[TIL] 2024-10-07 (SQL/ADsP) (0) | 2024.10.08 |
[TIL] 2024-10-06 (ADsP/DA) (0) | 2024.10.06 |
[TIL] 2024-10-05 (ADsP) (0) | 2024.10.06 |
@mane Lab :: 마네의 연구소
배움에 즐거움을 느끼는 마네의 연구소입니다. 이미지 출처 : https://www.instagram.com/hoseobiiiiiii._.0410/
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!