본문 바로가기

IT/NOSQL

[MongoDB] 불필요한 index 정리 및 최적화 (2022.09.01) 0. Table Of Contents 0. Table Of Contents 1. 개요 2. 배경 지식 2.1. 인덱스 2.2. B-Tree 2.3. B-Tree에 최적화된 mongodb index 설계 2.3.1. ESR Rule 2.3.2. 왜 ESR Rule을 따라야 하는가? 3. 개선 전 DB 문제점 분석 3.1. 불필요한 인덱스 3.2. 인덱스 카디널리티 분석 3.3. ESR Rule 분석 4. 인덱스 튜닝 결과 4.1. Index Access 4.2. 카디널리티 분석 ESR Rule 분석을 통한 개선 4.3. 총평 5. 후기 및 다음 작업에 대한 예고 1. 개요 여러 서비스로 쪼개져 있는 환경에서는 각 마이크로서비스가 필요한 인덱스를 build 할 수 있다. 그러나, 인덱스를 개발자 간 상호 협.. 더보기
[MongoDB] Timeseries Collection에 대한 연구 0. Table Of Content 0. Table Of Content 1. Time Series Collection을 연구하게 된 계기 2. Time Series Data란 무엇인가? 3. 일반 Collection과 Time Series Collection의 동작 방식 3.1. 일반 Collection 3.2. TimeSeries Collection 4. 적용 방법 4.1. MongoDB 설치 4.2. NestJS 초기 설정 4.2.1. mongoose 설치 4.2.2. mongoose connection 설정 4.2.3. Schema 작성 4.2.4. Schema를 injection 받아서 사용할 수 있도록 선언해준다. 4.3. MongoDB data auto delete by ttl 설정 (Opti.. 더보기
[MongoDB] MongoDB Performance를 향상시키는 전략 0. Table Of Contents 0. Table Of Contents 1. 많은 인덱스를 생성하지 않는다. 2. Index Prefix를 적극적으로 이용하자. 3. Multi Sorting의 경우 sort 방향 신경써서 index를 설계하자 4. 하나의 collection을 여러개의 collection으로 분리하자 5. MongoDB를 4.0이상 버전으로 유지하자. 5.1. Non blocking Secondary Read 5.2. Multi Transaction 6. Reference 1. 많은 인덱스를 생성하지 않는다. 다음 사진과 같이 인덱스를 하나의 사전이라고 생각해보자. 위 같은 구조에서 collection에 name이라는 property가 “AB“라는 document를 추가한다고 가정하자.. 더보기
[DynamoDB] Secondary Index 설계원칙 및 고려사항 1. Secondary Index를 사용하는 이유 다음과 같은 은행 계좌를 관리하는 테이블을 생각해보자. OriginCountry가 Germany인 모든 데이터를 불러온다고 가정하자. Query를 통해서 불러오기 위해선 AccountID와 CreationDate을 알고 있는 상황이어야 하지만 실제 Query상황에서는 이를 알 수 있는 방법이 없기 때문에 scan을 사용해야한다. scan을 사용하면 모든 데이터에 대해 검색을 실행하기 때문에 그만큼 실행속도가 느리다. 그러나 GSI를 사용하게 되면 다음과 같이 Primary Key를 원하는대로 바꿔서 테이블을 새로 생성 할 수 있다. GSI Table(우측 테이블)을 생성하면서 기존 OriginCountry 속성을 Partition Key로 설정하였다. 기.. 더보기
[DynamoDB] Partition Key 설계 원칙 및 고려사항 Table of content 1. DynamoDB Partitioning 원리 2. Partition Key 설계시 고려사항 2-1. 분산된 워크로드 2-2. Partition Key에 난수 추가 (Sharding) 2-3. Partition Key를 이용한 효율적인 쓰기 작업 분산 3. 참고문헌 1. DynamoDB Partitioning 원리 DynamoDB는 자체 내부 Hash Function이 있다. Partition Key값을 파라미터로 계산된 Hash Value를 기준으로 DynamoDB Table 내부의 파티션이 결정되어 데이터는 적재된다. Primary Key가 복합키인 경우에도 단일 Partition Key로 이루어진 경우와 같은 방식으로 partition key hash값을 계산하여 .. 더보기
NoSQL vs RDS 1. why we use noSQL 유연성 : rdb와 비교하여, 유연한 스키마를 제공하고 있기 때문에 데이터베이스를 반정형 또는 비정형적인 데이터를 취급하는데 유리하다. 이러한 스키마는 빠르고 반복적인 개발을 유도하게 된다. 확장성 : noSQL 데이터베이스는 고가의 스펙이 뛰어난 서버 대신, 분산형 클러스터를 이용하기 때문에, 서버 운영에 대한 부담 절감과 더 적은 스트리지를 기반으로 운영 할 수 있게 됨에 따라 더 많은 데이터를 담을 수 있게 되었다. 고성능 : 특정 비정형 데이터(document, key-value, graph … ) 및 엑세스 패턴에 대해 특화시킬 수 있기 때문에 특정 워크로드를 유사하게 받아들이는 것이 아닌 그대로 받아들일 수 있게 된다. 이에 따라 유사한 환경을 제공하는 rd.. 더보기
[DynamoDB] Amazon DynamoDB 구성 요소 Table of content 1. 테이블 2. 항목(Item) 3. 속성(Attribute) 4.Primary Key 4.1. Partition Key 4.2. Sort Key (Range Key) 5. Secondary Index 6. WCU, RCU 6.1.RCU (Read Capacity Unit) 6.2.WCU (Write Capacity Unit) 6.3. 참고 - 일관성 7. 참고문헌 1. 테이블 데이터 레코드의 집합 2. 항목(Item) 테이블에 있는 하나의 레코드 자체를 의미 3. 속성(Attribute) 기본적인 데이터 요소로 더 이상 나뉠 수 없는 것, 항목의 조각 속성에 대한 내포 속성은 32 깊이 까지 허용 대부분의 속성은 스칼라(하나의 값만 가질 수 있음)다. 4. primary.. 더보기