DB/MongoDB 4

[MongoDB] 스키마 모델링 기법

개요 기존 게시물(https://jaimemin.tistory.com/2332)에서도 언급했다시피 MongoDB의 스키마가 자유로운 것은 맞으나 관련 없는 데이터들끼리 하나의 컬렉션에 모을 경우 관리도 힘들고 성능 저하를 야기하기 때문에 어느 정도의 모델링은 필요합니다. [MongoDB] MongoDB 개요 개요 현재 진행하고 있는 프로젝트에서는 관계형 데이터베이스와 cache 목적으로 사용하는 Redis만 사용하고 있습니다. 아무래도 agile 방법론을 도입하여 개발을 진행하다 보니 데이터베이스 스키 jaimemin.tistory.com 또한, 하나의 document 사이즈가 최대 16MB로 제한되어 있기 때문에 경우에 따라서 MongoDB 철학인 "data access together, stays t..

DB/MongoDB 2023.12.08

[MongoDB] 인덱스

인덱스 관계형 데이터베이스처럼 인덱스로 지정한 필드 키를 정렬된 상태로 저장하는 Object입니다. 기본적으로 자주 조회되는 필드는 인덱스로 지정하는 것이 좋으나 인덱스를 많이 지정할수록 데이터를 입력할 때마다 후처리로 정렬을 진행해야 하므로 Write 성능이 떨어진다는 단점이 있습니다. 정리하자면 인덱스를 지정하면 Read 성능은 올라가지만 Write 성능이 떨어지는 trade-off 관계이므로 인덱스를 시스템 요구사항에 맞게 적절히 설정할 필요가 있습니다. MongoDB에서 제공하는 인덱스 MongoDB의 장점 중 하나는 아래 나열한 것처럼 다양한 인덱스를 제공한다는 것입니다. Single Field Index: 단일 필드에 부여하는 인덱스 Compound Index: 여러 필드에 부여하는 인덱스 M..

DB/MongoDB 2023.12.01

[MongoDB] Read/Write 제어

Read Preference 읽기 요청 트래픽 분산 및 쓰기 요청 처리하는 primary 멤버 부하 방지를 위한 옵션 종류 Read Preference 종류는 총 5가지가 있으며 앞서 설명했다시피 주목적이 Read 요청 트래픽 분산 및 Write 요청 처리하는 primary 멤버 부하 방지이기 때문에 주로 secondary 혹은 secondaryPreferred로 설정합니다. primary: 무조건 primary 멤버로 읽기 요청 primaryPreferred: 가능하면 primary 멤버로 읽기 요청을 보내고 없으면 secondary 멤버에 요청 secondary: 무조건 secondary 멤버로 읽기 요청 secondaryPreferred: 가능하면 secondary 멤버로 읽기 요청을 보내고 없으면..

DB/MongoDB 2023.11.29

[MongoDB] MongoDB 개요

개요 현재 진행하고 있는 프로젝트에서는 관계형 데이터베이스와 cache 목적으로 사용하는 Redis만 사용하고 있습니다. 아무래도 agile 방법론을 도입하여 개발을 진행하다 보니 데이터베이스 스키마가 지속적으로 변경하는데 제공하는 기능으로 데이터 export/import가 있다 보니 스키마가 변경될 때마다 소스 코드를 직접 수정하고 변경된 DB 스키마를 local, staging, dev 그리고 prod 환경에 모두 반영해야 하는 애로사항이 발생했습니다. 이에 따라 저희 팀에서는 schema가 비교적 자유롭고 고가용성과 수평 확장이 용이한 MongoDB를 도입하는 것을 고려 중이고 내년부터 도입할 것 같아 이 게시물을 통해 MongoDB에 대해 간단히 알아보도록 하겠습니다. SQL vs NoSQL Mo..

DB/MongoDB 2023.11.26