본문 바로가기

Data

(23)
[Data] 보조 색인에서 인메모리 DB까지 — 데이터를 찾는 다양한 전략 📌 데이터베이스 깊이 파기 시리즈 — 5편 들어가며 3편에서 B-Tree와 LSM-Tree라는 두 가지 핵심 스토리지 엔진 구조를 살펴보았습니다. 하지만 실제 데이터베이스에서는 기본 키(primary key) 하나만으로 데이터를 찾는 경우가 드뭅니다. "이메일이 user@example.com인 사용자를 찾아라", "서울에 있는 식당 중 평점 4.5 이상을 찾아라"처럼 기본 키가 아닌 다른 칼럼으로 검색하는 일이 훨씬 많습니다. [Data] B-Tree vs LSM-Tree — RDB와 NoSQL은 왜 다른 스토리지 엔진을 선택했을까📌 데이터베이스 깊이 파기 시리즈 — 3편 들어가며들어가며이전 편들에서는 RDB, 문서 DB, 그래프 DB의 데이터 모델을 비교하고, SQL·MapReduce·그래프 질의 ..
[Data] SQL vs MapReduce vs 그래프 질의 언어 — 선언형과 명령형 사이에서 📌 데이터베이스 깊이 파기 시리즈 — 2편들어가며1편에서 RDB, 문서 DB, 그래프 DB의 데이터 모델을 비교했습니다. 데이터를 어떤 구조로 저장하느냐의 문제였습니다. 이번 편에서는 그 반대편 질문을 다룹니다 — 저장된 데이터를 어떻게 꺼내느냐, 즉 질의 언어의 문제입니다. 질의 언어는 크게 선언형(Declarative)과 명령형(Imperative) 접근으로 나뉩니다. SQL은 선언형의 대표주자이고, MapReduce는 그 중간 어딘가에 위치합니다. 그래프 질의 언어들은 각각 선언형(Cypher, SPARQL)과 명령형(Gremlin)으로 갈라집니다. 이 글에서는 각 질의 언어가 어떤 철학 위에 서 있는지, 그리고 데이터 모델에 따라 왜 서로 다른 질의 언어가 필요한지를 살펴보겠습니다. 1. 선언형..
[Data] Elasticsearch와 Lucene — 세그먼트, 역인덱스, 그리고 벡터 검색 📌 데이터베이스 깊이 파기 시리즈 — 4편 들어가며3편에서 B-Tree와 LSM-Tree를 비교하면서, LSM-Tree는 쓰기에 최적화된 구조라고 했습니다. 그런데 Elasticsearch(이하 ES)는 검색 엔진입니다. 읽기가 핵심인 시스템이 왜 쓰기 최적화 구조를 채택했을까요? [Data] B-Tree vs LSM-Tree — RDB와 NoSQL은 왜 다른 스토리지 엔진을 선택했을까📌 데이터베이스 깊이 파기 시리즈 — 3편 들어가며들어가며이전 편들에서는 RDB, 문서 DB, 그래프 DB의 데이터 모델을 비교하고, SQL·MapReduce·그래프 질의 언어의 철학적 차이를 살펴봤습니다. 이dmoritle.tistory.com 이 질문에 답하려면 ES의 코어 엔진인 Lucene의 세그먼트 아키텍처를..
[Data] B-Tree vs LSM-Tree — RDB와 NoSQL은 왜 다른 스토리지 엔진을 선택했을까 📌 데이터베이스 깊이 파기 시리즈 — 3편 들어가며들어가며이전 편들에서는 RDB, 문서 DB, 그래프 DB의 데이터 모델을 비교하고, SQL·MapReduce·그래프 질의 언어의 철학적 차이를 살펴봤습니다. 이번에는 한 단계 더 아래로 내려가서, 스토리지 엔진의 내부 구조를 살펴보겠습니다. 핵심 질문은 이것입니다.같은 데이터를 저장하는데, 왜 RDB는 B-Tree를 쓰고 NoSQL 계열은 LSM-Tree를 많이 쓸까?이 질문에 답하려면 먼저 각 자료구조가 디스크에 데이터를 어떻게 쓰고 읽는지를 이해해야 합니다. 1. B-Tree — 읽기에 최적화된 구조기본 원리B-Tree는 데이터를 고정 크기의 페이지(보통 4KB~16KB) 단위로 나눠서 디스크에 저장합니다. 각 페이지는 정렬된 키와 자식 페이지에 대..
[Data] RDB vs 문서 DB vs 그래프 DB — 스키마 변동성과 데이터 지역성 관점에서 📌 데이터베이스 깊이 파기 시리즈 — 1편 들어가며데이터베이스를 선택할 때 "그냥 RDB 쓰면 되지 않나?"라고 생각하기 쉽습니다. 실제로 대부분의 경우 RDB는 훌륭한 선택입니다. 하지만 요구사항에 따라 문서 DB나 그래프 DB가 확실한 이점을 가지는 영역이 있습니다. 이번 글에서는 그 중에서도 스키마 변동성과 데이터 지역성 두 가지 관점에 집중해서 세 종류의 DB를 비교해보겠습니다. 먼저 각 DB를 간단히 짚고 가겠습니다RDB (관계형 데이터베이스)는 테이블 기반의 정형 데이터 저장소입니다. MySQL, PostgreSQL 등이 대표적이고, 스키마를 사전에 정의하고 데이터 간의 관계를 외래 키로 표현합니다. 문서 DB는 JSON이나 BSON 같은 문서 단위로 데이터를 저장합니다. MongoDB, C..
[검색 엔진] Elasticsearch는 어떤 GC를 사용할까? Elasticsearch를 운영하다 보면 JVM 관련 설정을 마주치게 됩니다. 힙 크기 설정부터 GC 로그까지, 이 설정들을 제대로 이해하려면 ES가 내부적으로 어떤 GC를 사용하는지 알아야 합니다. 이번 포스트에서는 Elasticsearch의 GC 변천사와 현재 기본 GC인 G1GC에 대해 정리해보겠습니다. ES의 GC 변천사: CMS에서 G1GC로Elasticsearch는 오랫동안 CMS(Concurrent Mark Sweep) GC를 기본으로 사용해왔습니다. 그런데 CMS는 Java 9에서 deprecated, Java 14에서 완전히 제거되었습니다.Elasticsearch는 이 변화에 대응하기 위해 jvm.options 파일에 JDK 버전별 분기 처리를 도입했습니다.## GC configurati..
[인메모리 DB] Redis를 사용하는 이유 들어가며백엔드 개발을 하다 보면 Redis라는 이름을 정말 자주 접하게 됩니다. 캐싱, 세션 관리, 실시간 기능 구현 등 다양한 곳에서 활용되는데요. 이번 글에서는 Redis가 무엇인지, 왜 사용하는지, 그리고 실제로 어떻게 활용되는지 정리해보겠습니다. Redis란?Redis(Remote Dictionary Server)는 오픈소스 인메모리 데이터 구조 저장소입니다.쉽게 말해, 데이터를 디스크가 아닌 메모리(RAM)에 저장해서 엄청나게 빠른 읽기/쓰기 성능을 제공하는 저장소입니다. 단순한 Key-Value 저장소를 넘어서 다양한 자료구조를 지원하기 때문에 데이터베이스, 캐시, 메시지 브로커 등 여러 용도로 활용됩니다. Redis를 사용하는 이유1. 압도적인 속도Redis의 가장 큰 장점은 속도입니다.저장..