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..
5.2 explain 출력 쿼리에 대한 많은 정보를 제공, 느린 쿼리를 위한 중요한 진단 도구 어떤 인덱스가 어떻게 사용되는지 알 수 있음 쿼리 마지막에 explain 호출 추가 쿼리가 "COLLSCAN"을 사용하면 인덱스를 사용하지 않음 "needYields" : 쓰기 요청을 처리하도록 쿼리가 양보(일시정지)한 횟수 대기 중인 쓰기가 있다면 쿼리는 일시적으로 락을 해제하고 쓰기 처리 "indexBounds" : 인덱스가 어떻게 사용됐는지 설명하며 탐색한 인덱스의 범위를 제공 {"username": 1, "age":1}, {"age":1, "username":1} 인덱스 존재 시 쿼리마다 사용 인덱스 상이 > db.users.find({"age":{>:10}, "username":"user2134"}..
5.1 인덱싱 소개 인덱스를 사용하지 않는 쿼리를 컬렉션 스캔이라 함 explain 커서 메서드는 CRUD 작업의 실행 정보 제공 executionStats 모드는 인덱스를 이용한 쿼리의 효과를 이해하는 데 도움 totalDocsExamined : 쿼리를 실행하면서 살펴본 도큐먼트 개수 totalKeysExamined : 결과 셋을 생성하기 위해 인덱스 내에서 몇 개의 키를 통과했는지 nReturned : 반환받은 결과의 개수 쿼리 패턴 : 애플리케이션이 데이터베이스에 요구하는 다양한 유형의 질문 > db.users.find({"username" : "user101"}).explain("executionStats") { "queryPlanner" : { ... }, "executionStats" : { ..
4.1 find 첫 매개변수에 가져올 도큐먼트를 결정 쿼리 도큐먼트에 키/값 쌍을 추가해 검색을 제한 여러 개의 키/값 쌍은 '조건1 AND 조건2 AND...' > db.c.find()//빈 쿼리 도큐먼트는 컬렉션 전체 조회 > db.c.find({})//동일 > db.users.find({"username" : "joe"})//문자열형이 일치하는 도큐먼트 조회 > db.users.find({"username" : "joe", "age" : 27}) 4.1.1 반환받을 키 지정 두 번째 매개변수에 반환받을 키를 지정 네트워상의 데이터 전송량과 클라이언트 측에서 디코딩하는 데 시간, 메모리 절약 "_id" 키는 지정하지 않아도 항상 반환, 제외도 가능 > db.users.find({}, {"usernam..
3.1 도큐먼트 삽입 insertOne 메서드 사용 > db.movies.insertOne({"title" : "StarWars"}) 3.1.1 insertMany 각 도큐먼트에 대해 데이터베이스로 왕복하지 않고 bulk insert 처리 단일 컬렉션에 삽입할 때 유용 48mbyte 크기씩 분할 삽입 두번째 매개변수로 옵션 도큐먼트 지정 "ordered" : true (default) 정렬된 삽입, 오류발생하면 이후 삽입 X "ordered" : false 정렬되지 않은 삽입, 오류발생 관계없이 모두 삽입 시도 3.1.2 삽입 유효성 검사 "_id" 필드가 없으면 새로 추가 모든 도큐먼트는 16mbyte 크기 제한 3.1.3 삽입 insertOne, insertMany 3.2 도큐먼트 삭제 deleteO..
1.1 손쉬운 사용 도큐먼트 지향 데이터베이스 키와 값을 미리 정의하지 않고 고정된 스키마가 없음 1.2 확장 가능한 설계 분산 확장을 염두하여 설계 데이터를 여러 서버에 쉽게 분산 1.3 다양한 기능 인덱싱 집계 특수한 컬렉션 유형 파일 스토리지 1.4 고성능 동시성과 처리량을 극대화하기 위해 WiredTiger Storage engine에 기회적 락(Opportunistic Locking)을 사용 캐시처럼 제한된 용량의 램으로 쿼리에 알맞은 인덱스를 자동 선택 1.5 몽고DB 철학 확장성이 높으며 유연하고 빠른, 완전한 기능을 갖춘 데이터 스토리지를 만드는 일