언제 샤딩해야 하나 사용 가능한 메모리를 늘릴 때 사용 가능한 디스크 공간을 늘릴 때 서버의 부하를 줄일 때 한 개의 mongod가 다룰 수 있는 처리량보다 더 많이 데이터를 읽거나 쓸 때 서버 시작 구성 서버는 클러스터 구성을 저장하는 일반 mongod 서버 클러스터 구성은 샤드를 호스팅하는 복제 셋, 샤딩된 컬렉션, 각 청크가 위치한 샤드 등을 포함 구성 서버 구성 서버는 어떤 서버가 무슨 데이터를 갖고 있는지에 대한 모든 메타 데이터를 보유 mongos가 구성 서버로부터 구성을 가져오므로, 구성서버는 mongos 프로세스 앞서 시작해야함 3개의 개별 시스템에서 구성 서버 시작 --configsvr 옵션은 mongod를 구성 서버로 사용하겠다는 뜻 config 와 admin 이외의 데이터베이스에 데이..
샤딩 여러 장비에 걸쳐 데이터를 분할하는 과정 파티셔닝이라는 용어로도 불림 하드웨어 및 비용 제약을 해결하거나 애플리케이션에 나은 성능을 제공하기 위해 데이터셋을 분할하는데 사용 더 자주 사용되는 데이터를 성능이 더 좋은 하드웨어에 배치 지역에 따라 데이터셋을 분할해 주로 접근하는 애플리케이션 서버와 가까운 컬렉션에서 서브셋 조회 수동 샤딩을 사용하면 애플리케이션이 다른 DB 서버와 연결을 유지, 각 서버는 완전히 독립적 몽고는 애플리케이션에서 구조를 추상화하고 시스템 관리를 간단하게 하는 자동 샤딩을 지원 클러스터 구성 요소 몽고는 샤딩을 통해 많은 장비의 클러스터를 생성하고, 각 샤드에 데이터 서브셋을 넣음으로써 컬렉션을 쪼갬 애플리케이션이 독립 실행형 서버나 복제 셋의 리소스 한계에 구애되지 않음 ..
13.1 독립 실행형 모드에서 멤버 시작 유지 보수 작업은 (쓰기와 관련) 세컨더리에서 수행 불가 애플리케이션 성능에 영향을 미치기 때문에 프라이머리에서 수행하면 안됨 복제 셋의 멤버가 아닌 독립 실행형 서버로 재시작해야함 이 서버에서 유지 보수를 수행하려면 replSet 옵션 없이 서버를 재시작 다른 서버에서 통신하지 않도록 다른 포트로 수신 서버의 데이터를 어떤 방식으로든 조작하기 위해 dppath는 그대로 유지 > db.serverCmdLineOpts() { "argv" : [ "mongod", "-f", "/var/lib/mongod.conf" ], "parsed" : { "replSet": "mySet", "port": "27017", "dbpath": "/var/lib/db" }, "ok" :..
12.1 클라이언트 - 복제 셋 연결 동작 복제 셋이면 기본적으로 드라이버는 프라이머리에 연결되고 모든 트래픽을 프라이머리에 라우팅 애플리케이션은 복제 셋이 백그라운드에서 대기 상태를 유지하는 동안 독립 실행형 서버와 통신하듯이 읽기와 쓰기 수행 복제 셋의 목적은 네트워크 파티션이나 서버가 다운될 때도 데이터의 가용성을 높이는 것 이용 가능한 프라이머리가 없으면 드라이버는 읽기/쓰기를 처리하지 않는다 문제가 발생했을 때 올바른 전략은 최대 한 번만 재시도하는 방법 연산이 멱등이라면 네트워크 오류를 한번 재시도하면 여러 유형의 오류를 모두 올바르게 처리할 수 있다 모든 몽고DB 드라이버는 재시도 가능한 쓰기 옵션을 지원 명령 오류는 클라이언트 측 처리를 위해 어플리케이션에 반환 네트워크 오류는 프라이머리 ..
11.1 동기화 프라이머리가 수행한 쓰기를 모두 포함하는 로그 oplog를 보관함으로써 복제를 수행 oplog는 프라이머리의 로컬 데이터베이스에 있는 제한 컬렉션 세컨더리는 이 컬렉션에 복제를 위한 연산을 쿼리 각 세컨더리는 프라이머리로부터 복제한 작업을 각각 기록하는 oplog를 보관 oplog는 다른 멤버에 대한 동기화 소스로 사용되도록 한다 세컨더리가 다운되면 재시작할 때 oplog에 있는 마지막 연산과 동기화 oplog는 크기가 고정되어 있으므로 담을 수 있는 연산의 수가 정해져 있다 일반적으로 oplog는 기본 크기면 충분 11.1.1 초기 동기화 초기 동기화를 수행해 복제 셋의 한 멤버에서 다른 멤버로 모든 데이터를 복사 모든 데이터를 대상 멤버에 있는 자체 컬렉션 복사본에 삽입 대상 멤버의 ..
10.1 복제 소개 복제는 데이터의 동일한 복사본을 여러 서버상에서 보관하는 방법 실제 서비스를 배포할 때 권장 한 대 또는 그 이상의 서버에 이상이 발생하더라도 복제 애플리케이션이 정상적으로 동작하게 하고 데이터를 안전하게 보존 복제 셋은 클라이언트 요청을 처리하는 프라이머리 서버 한대, 프라이머리 데이터의 복사본을 갖는 세컨더리 서버 여러 대로 구성 프라이머리 서버에 장애가 발생하면 세컨더리 서버 중 새로운 프라이머리 서버를 선출 복제를 사용하는 상태에서 서버가 다운되면, 복제 셋에 잇는 다른 서버를 통해 데이터에 접근 가능 10.2 복제 셋 설정 각 별도의 터미널에서 mongod 실행 mongod --replSet mdbDefGuide --dbpath ~/data/rs1 --port 27017 --..
8.1 트랜잭션 소개 트랜잭션은 읽기나 쓰기 작업이 가능한 데이터베이스 작업을 하나 이상 포함하는 데이터베이스의 논리적 처리 단위 작업이 성공하든 실패하든 부분적으로는 완료되지 않음 8.1.1 ACID 정의 Atomicity 원자성 트랜잭션 내 모든 작업이 적용되거나 아무 작업도 적용되지 않도록 한다 커밋 되거나 중단된다 Consistency 일관성 트랜잭션이 성공하면 DB가 하나의 일관성 있는 상태에서 다음 일관성 있는 상태로 이동 Isolation 고립성 여러 트랜잭션이 DB에서 동시에 실행되도록 허용하는 속성 트랜잭션이 다른 트랜잭션의 부분 결과를 보지 않도록 보장 Durability 영속성 트랜잭션이 커밋될 때 시스템 오류가 발생하더라도 모든 데이터가 유지 8.2 트랜잭션 사용법 코어 API 대부..
9.1 스키마 설계 고려 사항 제약 사항 도큐먼트 최대 크기 16Mbyte 디스크에서 전체 도큐먼트를 읽고 쓴다 갱신은 전체 도큐먼트를 다시 쓰며, 원자성 갱신은 도큐먼트 단위로 실행 쿼리 및 쓰기의 접근 패턴 쿼리 수를 최소화하고, 함께 쿼리되는 데이터가 동일한 도큐먼트에 저장되도록 설계 쿼리에 사용되지 않는 데이터는 다른 컬렉션에 넣어야 한다. 자주 사용하지 않는 데이터도 다른 컬렉션으로 넣는다. 관계 유형 요구 사항 측면과 도큐먼트 간 관계 측면 고려하여 도큐먼트를 내장하거나 참조할 방법을 결정 쿼리하지 않고 도큐먼트를 참조하는 방법을 파악해야 하며, 관계가 변경될 때 갱신되는 도큐먼트 개수를 알아야함. 카디널리티 일대일, 일대다, 다대다 인지 고려 도큐먼트 간에 데이터를 비정규화해야 할지, 도큐먼..

7.1 파이프라인, 단계 및 조정 가능 항목 집계 프레임워크는 파이프라인 개념을 기반 단계마다 해당 입력에 다른 작업을 수행 모든 단계의 입력과 출력은 도큐먼트(도큐먼트 스트림) 집계 파이프라인의 개별 단계는 데이터 처리 단위 한 번에 입력 도큐먼트 스트림을 하나씩 가져와서, 각 도큐먼트를 하나씩 처리하고, 출력 도큐먼트 스트림을 하나씩 생성 각 단계는 knobs 또는 tunables 셋을 제공 이 항목들을 조정해 각 단계를 매개변수로 지정함으로써 원하는 작업을 수행 가능 tuables은 필드를 수정, 산술 연산, 도큐먼트 재구성, 누산 작업 등 연산자 형태 동일한 유형의 단계를 단일 파이프라인의 여러 번 포함 가능 7.2 단계 시작하기 aggregate는 집계 쿼리를 실행할 때 호출하는 메서드 일치 단..
GeoJSON Object 몽고DB에서 GeoJSON Objects는 지리적 위치 정보를 나타내는 JSON 형식의 데이터입니다. GeoJSON은 다양한 지리 정보 데이터 유형을 포함하는 오픈 소스 데이터 형식으로, 지리적 위치 정보를 다루는 많은 애플리케이션에서 사용됩니다. 몽고DB는 GeoJSON Objects를 지원하며, GeoJSON 형식의 데이터를 저장하고 쿼리하기 위한 강력한 기능을 제공합니다. 모든 GeoJSON 객체는 몽고DB의 지리 공간 인덱스(Spatial Index)를 사용하여 쿼리할 수 있습니다. type 필드 : GeoJSON Object 타입 "Point", "LineString", "Polygon", "MultiPoint", "MultiLineString", "MultiPolyg..