Software Development/Database
-
[OLAP] ClickHouse 살펴보기Software Development/Database 2026. 1. 4. 20:00
들어가며[1]클릭하우스는 OLAP 기반의 고성능, 컬럼기반 SQL DBMS이다. 오픈소스와 클라우드로 이용할 수 있다.OLAP이란 무엇일까? 대용량 데이터셋에 대해서 집계, 산술연산, 스트링 프로세싱이 SQL로 가능하다.OLTP는 쿼리당 작은 row를 읽어서 반환하는 것과 다르게 OLAP은 수십억 로우 이상에 대해서 분석 쿼리가 가능하다.OLAP의 특징은 real-time이라는 수식어가 붙는데 이는 초단위 내로 분석 쿼리 결과를 반환하는 시스템을 의미한다. 아래의 쿼리 질의에 대해서 강력한 성능을 Row 기반보다 빠르게 제공하는게 Column 기반 스토리지의 특징이다.SELECT MobilePhoneModel, COUNT() AS cFROM metrica.hitsWHERE RegionID = 2..
-
[Redis] Redis 동작방식 살펴보기Software Development/Database 2025. 1. 24. 20:04
Remote Dictionary Server의 약자로 In-memory cache 솔루션이다[1] 주요 사용 사례로는 caching, session, pub/sub이 있다.C언어로 작성되었다.Redis는 백업 저장소로 디스크를 사용한다. 레디스는 메모리에 데이터를 저장하기 때문에 메모리가 부족하면 swap으로 인해 성능 저하가 발생할 수 있다.Swap을 할 수 있는 상태라면, 시스템 다운 및 프로세스 Hang을 방지할 수 있지만, 성능 저하가 발생할 수 있다.Swap을 할 수 없는 상태라면, OOM으로 죽을 수 있다.레디스는 maxmemory라는 설정을 통해서 메모리의 양을 조절할 수 있다. 최대치로 데이터를 저장하게 되면 기존 데이터를 제거하는 방식으로 동작하는데 이를 eviction이라고 부른다. 이..
-
Database의 파일시스템 EXT4, XFS 비교 (Feat. MongoDB, ScyllaDB)Software Development/Database 2024. 6. 22. 00:00
https://www.mongodb.com/docs/manual/administration/production-notes/#kernel-and-file-systems Production Notes - MongoDB Manual v7.0This page details system configurations that affect MongoDB, especially when running in production.To learn more about running in production for deployments hosted in MongoDB Atlas, see Atlas Production Notes.For running in production, refer to the Recommewww.mongodb..
-
[몽고디비] Query PlansSoftware Development/Database 2023. 5. 9. 14:58
https://www.mongodb.com/docs/manual/core/query-plans/ Query Plans — MongoDB Manual Docs Home → MongoDB Manual For a query, the MongoDB query optimizer chooses and caches the most efficient query plan given the available indexes. The evaluation of the most efficient query plan is based on the number of "work units" (works) performed by www.mongodb.com 위의 사이트에서 참고하였습니다. 쿼리 성능이 제대로 안나오는 원인은 인덱스랑 관련..
-
[MongoDB] createIndex commitQuorumSoftware Development/Database 2023. 3. 31. 23:00
몽고디비 인덱스 생성시에 commitQuorum 옵션이 있다. 기본값은 'votingMembers'인데, 데이터 보유 노드 전체에 인덱스를 생성해야 결과를 출력한다. 만약 데이터 보유 노드 중 한대가 RECOVERING 상태이고 commitQuorum: votingMembers 옵션으로 createIndex를 생성하면 결과를 반환하지 않는다. 결과를 반환하지 않는다고 해서 인덱스가 생성되지 않은 것은 아니다. 프라이머리노드 및 살아있는 세컨더리 노드는 인덱스가 생성됐을 수 있다. 그렇기 때문에 createIndex시에 응답이 필요한 경우는, commitQuorum옵션을 majority로 설정하는 것이 좋다. 만약 노드중 한대가 RECOVERING일 때, commitQuorum옵션을 votingMember..
-
-
[MongoDB] 재해복구 시스템을 위한 몽고디비 노드 설정.Software Development/Database 2023. 3. 10. 20:30
재해복구 시스템을 위해서는 다른 Zone 또는 Region에 클러스터를 배포해야 한다. 예를 들어, 데이터센터 A와 데이터센터 B가 있을 경우, A, B에 각각 2~3대의 노드를 배포하는 방식으로 동작한다. 몽고디비는 프라이머리 노드 선출을 위해 노드의 개수를 홀수로 설정하는 것을 권장한다. 만약 A, B에 2대 2대가 있다면, 4대의 노드로 짝수의 노드이기 때문에 해당 권장사항을 따르지 않는다. 이를 해결하기 위해서, A에 3대 B에 2대를 설정하여 홀수개의 노드로 해당 권장사항을 충족할 수 있다. 그런데 위의 방식은 문제점이 존재한다. 만약 A 데이터센터가 정전, 네트워크 이슈 같은 이유로 3대가 사용이 불가능하게 된다면 어떻게 될까? 5대의 노드 중에 총 B 데이터 센터의 2대의 노드만 살아있게 된..
-
[MongoDB] Compound Index 생성해도 왜 쿼리가 느리지?Software Development/Database 2022. 5. 31. 20:40
여러개의 field를 가지고 index를 생성할 때 compound index를 이용한다. 생성한 compound index의 field를 포함하는 조건을 가지고 query를 실행해도 느린 경우가 있다. 그 이유는 Query Selectivity과 관련이 있다. eplain('executionStats')로 쿼리플랜을 조회하면, totalKeysExamined, nReturned가 있다. 위 두 값의 차이가 크면 성능이 좋지 못한 것이다. 예를 들어 nReturned가 100이고, totalKeysExamined가 100,000이라면 100개의 문서를 찾는데 100,000개의 키를 스캔하게 되는 것이다. 인덱스를 타서 Collection Scan을 피하긴 했지만, 여전히 스캔하는 데이터의 양이 많은 것이..