Database/NoSQL 8

Redis Cluster(레디스 클러스터) 이해하기!

해당 포스팅에서는 Redis cluster에 대해서 다룬다. Sharding 일반적으로 샤딩을 할 때 아래와 같이 Hash-Based Sharding을 사용할 수 있다. 문제는 위의 경우 샤드가 하나 늘어날 때마다 기존 데이터들을 전혀 다른 곳으로 이동시켜야 한다. Redis(레디스)는 이러한 점을 해결하고자 HashSlot을 사용한다. Redis는 16384개의 Hash Slot으로 Key 공간을 나누어서 관리한다. 각 키는 CRC16 해싱 후 16384로 Modulo Op(나머지 연산)를 하고 Hash Slot에 매핑한다. Hash slot은 각 노드들에게 나누어 분배한다. 이러한 과정으로 인해 새로운 샤드가 추가되더라도 모든 데이터가 영향을 받지 않고 Slot이 겹쳐지는 일부 샤드의 데이터만 옮겨주..

Database/NoSQL 2023.03.27

NoSQL - MongoDB 다양한 데이터 모델링 기법!

1. 너무 큰 배열 문제 아래 카페 서비스의 데이터 모델링을 한 예시가 있다. db.cafe.insertMany([ { _id: 1, name: "IT Community", desc: "A Cafe where developer's share information.", created_at: ISODate("2018-08-09"), last_article: ISODate("2022-06-01T10:56:32.00Z"), level: 5, members: [ { id: "tom93", first_name: "Tom", last_name: "Park", phone: "000-0000-1234", joined_at: ISODate("2018-09-12"), job: "DBA" }, { id: "asodsa123"..

Database/NoSQL 2023.03.21

NoSQL - MongoDB는 대용량 데이터를 처리하는 Database일까?

대용량 데이터 대용량 데이터의 기준은 뭘까? 일반적으로는 사람들이 다뤄보지 않은 데이터의 수준을 대용량 데이터라고 하는 것 같다. 그래서 회사마다 기준이 다르겠지만, 대용량 데이터의 기준은 1PB라고 말하곤 한다. MongoDB는 대용량 데이터를 위한 DB일까? MongoDB는 1PB의 데이터를 감당할 수 있을까..? MongoDB Atlas에서 어느정도 스펙까지 서버를 제공해주는 지를 보면 객관적인 수치라고 볼 수 있을 것이다. MongoDB Atlas에서 제공해주는 크기(조율이 가능) 중 가장 높은 스펙의 경우 RAM = 768GB, Storage(SSD) = 4096GB 이다. 즉 Storage는 4TB이고 기본 운영에도 스토리지가 사용된다는 것을 감안하면 300대가 있으면 1PB를 커버할 수 있다..

Database/NoSQL 2023.03.16

ElasticSearch 이해하기!

엘라스틱서치(ElasticSearch)는 Apache Lucene 기반의 Java 오픈소스 분산 검색 엔진이다. 최근 ELK 스택이라는 로그 통합 시스템에도 많이 활용하지만, 해당 포스팅에서는 엘라스틱 서치 자체에 대해서 다룬다. 활용 용도 요즘 충분한 캐시는 규모가 있는 기업이라면 당연하게 되었다. 우리가 구글, 유튜브 등에서 게시글을 조회한다고 가정하자. 검색 결과를 매번 조회하면 엄청나게 큰 부하가 발생한다. 이때 캐시를 사용할 수 있을까..? 검색에서 캐시를 활용하기는 어렵다. 캐시는 보통 Key-Value 구조를 가진다. 아래의 게시글이 있다고 가정하자. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세 이때 아래와 같이 엄청나게 큰 데이터를 중복해서는 엄청나게 많은 저장 공간이 ..

Database/NoSQL 2023.02.23

레디스 데이터 타입 정리!

레디스에서는 다양한 데이터 타입(자료구조)를 지원한다. 각 데이터 타입의 특징과 각 타입 별로 지원하는 명령어를 알아보자. 1. String 가장 기본적인 데이터 타입으로 가장 많이 사용된다. 바이트 배열을 저장한다. (binary-safe) 바이너리로 변환할 수 있는 모든 데이터를 저장할 수 있다. 최대 크기는 512MB 주요 명령어 GET - 특정 키의 문자열 값을 가져온다. SET - 특정 키의 문자열 값을 저장한다. INCR - 특정 키의 값을 Integer로 취급하여 1 증가시킨다. DECR - 특정 키의 값을 Integer로 취급하여 1 감소시킨다. 위 두개 명령어는 Atomic하기 때문에 Race-condition이 발생하지 않는다. MSET - 여러 키에 대한 값을 한번에 저장한다. MGE..

Database/NoSQL 2022.12.29

MongoDB란 무엇인가?! (기본 이해하기!)

MongoDB는 기존에 사용하던 RDB의 확장성과 신속성 문제로 개발한 Database이다. MongoDB는 NoSQL의 한 종류로, Document라는 형식의 자료구조를 사용한다. 현재 기준(2022년 12월)으로는 DB-Engines라는 사이트에서 매긴 DB 순위에서 NoSQL 중에서는 1위, 전체 DBMS 중에서도 5위를 차지했다. 산정 기준은 검색 엔진(Google, Bing) 검색 횟수, Google 트렌드 검색 빈도, SNS(Twitter, LinkedIn), IT Q&A 사이트 (Stack Overflow) 이슈 등을 활용했다. 가장 먼저 SQL과 NoSQL의 차이를 간략히 알아보자. SQL vs NoSQL 해당 포스팅은 NoSQL에 대한 글으로 해당 내용은 너무 상세히 다루지는 않는다. R..

Database/NoSQL 2022.12.28

Redis에 대해 자세히 알아보기! (+ Cache, WriteBack, Cluster, ...)

최근에 정보 공유를 하는 곳에서 Redis에 대한 얘기를 많이 들었다. Redis를 광적(?)으로 선호하고 만세를 외치시는 분들이 정말 정말 많다! 사기템, 만세, 짱짱, 충성, ... Redis에 대해 이렇게 얘기하시는 분들도 많은 것 같다. 조금 큰 규모의 회사라면 대부분 Redis 터지면 서비스가 다 죽을 것이다. Redis가 없으면 문닫을 회사도 많다(?) 뭔가 이야기를 듣다보니깐 내가 잘 모르고 있구나.. 라는 것을 느꼈다. (공감이 안됨.. ㅠ) 그래서 Redis에 대해 더 자세히 알아보자. Cxxpang Redis 사태 2019년 7월 24일에 쿠팡의 모든 판매 상품 재고가 '0'으로 표시되어 주문 및 구매를 할 수 없는 큰 장애가 일어난다. 사유는 해당 시스템이 Redis DB를 통해 데이..

Database/NoSQL 2022.11.14

In-memory DB 비교 (Redis vs Memcached)

In-memory DB 비교 사이드 프로젝트 진행 도중 MSA로의 확장성 등을 고려하여 Session storage로 In-memory DB를 고려하게 되었다. (이점: https://jaehoney.tistory.com/165?category=970233) 휴대 전화 인증 등도 메인 DB와 분리하여 관리하기 위해 In-memory DB에 저장할 계획을 가지고 있다. 대표적인 In-memory DB로 redis와 memcached가 있는데 어떤 차이점을 살펴보자. 공통점 1ms 이하의 응답시간을 제공한다. 문법적으로 사용하기 쉽고 개발이 편리하다. 데이터를 여러 노드에 분산하여 저장할 수 있다. Redis String, Set, Hash, List 등 복잡한 데이터 타입을 지원한다. ub / Sub 패턴..

Database/NoSQL 2022.07.10