1. MongoDB 복합인덱스MongoDB 인덱스에서는 여러 필드를 조합하여 인덱스를 만들 수 있다.이 때 서브필드를 키로 인덱스로 만들 수 있는데 부모필드를 인덱스로 만들때와는 차이가 있다. 2. MongoDB 테스트 버전유형버전구성mongosh2.2.10 mongodb7.0.12Config : 1개, 포트 20000Route : 1개, 포트 20001Shard1 : 1개, 포트 30001Shard2 : 1개, 포트 40001 3. MongoDB 테스트 데이터 적재부모필드와 서브필드에 다양한 방법으로 데이터를 적재한다. # field1 와 field2 는 부모필드# field1_1 와 field1_2 는 field1 의 서브필드# 데이터 적재[direct: mongos] indexDB> db.com..
분류 전체보기
1. MongoDB 실행계획쿼리가 효율적으로 실행되었는지 알기위해 MongoDB 는 explain 이라는 명령을 제공한다.실행계획을 분석하는 방법은 내용이 방대하여 여기에서는 다루지 않는다. 2. MongoDB 테스트 버전유형버전구성mongosh2.2.10 mongodb7.0.12Config : 1개, 포트 20000Route : 1개, 포트 20001Shard1 : 1개, 포트 30001Shard2 : 1개, 포트 40001 3. 실행계획 확인# 데이터베이스 이동[direct: mongos] test> use explainDBswitched to db explainDB# 데이터 적재[direct: mongos] explainDB> db.explainCollection.insert ( { identit..
1. MongoDB 인덱스쿼리를 효율적으로 사용하기 위해 MongoDB 는 인덱스를 제공한다.MongoDB 에서 인덱스 유형은 매우 다양하다.1-1. MongoDB 인덱스 유형유형설명단일 필드 인덱스특정 필드에 대한 인덱스복합 인덱스여러 필드를 조합한 인덱스해시 인덱스해시된 값으로 인덱스텍스트 인덱스텍스트 검색을 위한 인덱스2dsphere 인덱스지리공간 데이터에 대한 인덱스유일 인덱스유일한 값만 허용- 로컬서버 기준에 한정, 샤드서버로 데이터가 분산되는 경우에는 어플리케이션에서 처리 2. MongoDB 테스트 버전유형버전구성mongosh2.2.10 mongodb7.0.12Config : 1개, 포트 20000Route : 1개, 포트 20001Shard1 : 1개, 포트 30001Shard2 : 1개,..
1. MongoDB 레인지샤딩데이터와 서버의 부하를 분산하기 위해 MongoDB 는 샤딩을 제공하고 있다.샤딩 기법은 해시 / 레인지가 있고 이 포스팅에서는 레인지 샤딩을 구성해본다. 2. MongoDB 테스트 버전유형버전구성mongosh2.2.10 mongodb7.0.12Config : 1개, 포트 20000Route : 1개, 포트 20001Shard1 : 1개, 포트 30001Shard2 : 1개, 포트 40001 3. 전제조건mongodb 는 2개의 샤드서버가 구성되어 있는 상태이다.[direct: mongos] test> sh.status();shardingVersion{ _id: 1, clusterId: ObjectId('66838519ea100ebaf5ee3cc8') }---shards[..
1. MongoDB 해시샤딩데이터와 서버의 부하를 분산하기 위해 MongoDB 는 샤딩을 제공하고 있다.샤딩 기법은 해시 / 레인지가 있고 이 포스팅에서는 해시 샤딩을 구성해본다. 2. MongoDB 테스트 버전유형버전구성mongosh2.2.10 mongodb7.0.12Config : 1개, 포트 20000Route : 1개, 포트 20001Shard1 : 1개, 포트 30001Shard2 : 1개, 포트 40001 3. 전제조건mongodb 는 2개의 샤드서버가 구성되어 있는 상태이다.[direct: mongos] test> sh.status();shardingVersion{ _id: 1, clusterId: ObjectId('66838519ea100ebaf5ee3cc8') }---shards[ ..
쿼리의 성능에 있어 인덱스는 빠질 수 없는 부분이다.MongoDB 에서 사용할 수 있는 인덱스와 종류에 대해 살펴본다.또한 랜덤 I/O 와 순차 I/O 에 대해 살펴본다. 데이터베이스와 관련된 성능의 튜닝은 디스크 I/O 를 얼마나 줄이냐가 관건인 것들이 많이 있다. 디스크 읽기 방식디스크 저장 매체컴퓨터 장치의 성능을 보면 기계식 장치인 디스크가 가장 취약한 성능을 보였다.요즘은 이런 기계식에서 전자식으로 교체되고 있고 대표적으로 SSD 가 있다. SSD 는 D-RAM 과 달리 전원 공급에 관계없이 한번 기록한 내용을 영구적으로 보존하는 플래시 메모리를 내장하고 있고,D-RAM 보다는 떨어지지만 기계식 HDD 와 비교하면 월등하게 빠르다. SSD 의 가장 큰 장점은 랜덤 I/O 에 매우 적합하다는 것이..
청크 밸런싱샤드 간 데이터 불균형 현상을 피하기 위해 최대한 각 샤드가 가진 청크의 개수를 동일하게 만드려고 한다.그뿐만 아니라 하나의 청크가 너무 커지면 샤드 서버는 청크 하나의 이동에 너무 많은 시스템 자원을 소모한다.이렇게 하나의 청크가 너무 비대해지는 것을 막기 위해 각 청크에 데이터가 저장되거나 변경될 때마다 청크를 스플릿해야할지 체크하는 작업을 진행한다. 샤드 클러스터 밸런서밸런서는 샤드간 청크의 개수를 모니터링하다가 불균등해지면 적절히 청크를 옮겨서 샤드 간 부하의 균형을 맞춘다.불균형을 판단하는 기준은 청크를 가장 많이 가진 샤드와 가장 적게 가진 샤드의 개수가 임계치 이상 차이가 나면 청크 이동을 실행한다.전체 청크 수기준 치20개 미만의 청크를 가진 컬렉션220~79개 사이의 청크를 가..
샤딩 알고리즘청크각 컬렉션은 샤드 키를 기준으로 잘게 쪼개져 여러 샤드에 분산되어 관리된다.이렇게 쪼개진 컬렉션의 조각(파티션)들을 청크라고 한다. 청크는 샤드 키의 원본 값 또는 해시 값의 일정 범위를 가진다.샤드 키에서 가장 작은 값은 MinKey, 가장 큰 값은 MaxKey 로도큐먼트의 필드가 가질수 있는 최솟값과 최댓값을 지칭하는 가상의 값을 의미하는 예약어인데모든 청크는 MinKey 와 MaxKey 사이의 각 영역을 담당하게 된다. 청크는 어떠한 물리적인 의미를 가지지 않으며, 논리적으로만 존재하는 개념이다.즉 청크 단위로 데이터파일이 생성되거나 데이터가 모여있지 않다. 실제로 청크에 관계없이 하나의 컬렉션에 속한 데이터는 하나의 데이터 파일에 섞여서 존재한다.물론 컬렉션의 각 인덱스는 개별 파..
샤딩이란데이터를 여러 서버에 분산해서 저장하고 처리할 수 있도록 하는 기술이다. MongoDB 에서 샤딩을 적용하려면 샤드 클러스터를 구축해야 하는데,이를 위해 파티션된 데이터의 범위와 샤드 위치 정보 등의 메타 정보를 저장하기 위한 컨피그 서버가 필요하다. 응용 프로그램이 필요한 데이터를 조회하거나 저장하려면 mongos 라고 불리는 라우터서버가 필요하다.라우터는 쿼리 수행에 있어 프록시 역할을 하는데,컨피그 서버의 메타 정보를 참조하여 필요한 데이터가 저장된 샤드로 쿼리를 전달하고 그 결과를 다시 응용 프로그램으로 반환하는 역할을 한다. 샤딩의 필요성인터넷이 발달하고 인터넷이 가능한 단말기가 기하급수적으로 늘어나면서 서버에서는 더욱 많은 요청을 처리해야한다. 웹 서버는 특별한 설정이 필요한 상태를 가..
복제 로그 설정OpLog 는 큐처럼 작동하는 Cap 컬렉션으로 관리되는데,세컨드리 멤버가 OpLog 를 가져간다고 해서 컬렉션의 오래된 OpLog 가 자동으로 지워지지 않는다. 그래서 OpLog 를 저장하는 컬렉션은 항상 최대 크기를 명시해야 한다.oplog.rs 컬렉션을 포함한 Cap 컬렉션은 INSERT 이외의 데이터 변경을 허용하지 않으며,컬렉션이 지정된 크기를 넘어서면 MongoDB 서버가 자동으로 가장 오래된 데이터를 삭제하면서 지정된 크기를 넘지 않도록 한다. OpLog 컬렉션 크기 설정 컬렉션의 크기가 중요한 이유는 이 컬렉션이 OpLog 를 얼마나 담을 수 있느냐에 따라 세컨드리가 허용 가능한 지연 시간이 결정되기 때문이다. 프라이머리 OpLog 가 1 2 3 4 5 가 있을 때, 세컨드리..