서로 다른 인덱스가 둘 다 사용 가능할 경우 mongoDB는 어떤 Plan을 선택할까? 상황을 가정해보자. 먼저 다음과 같은 2개의 documents가 있고 name이라는 single field Index가 있고 name과 age의 combination field Index가 있다. 이름이 "Manu"고 나이가 30인 사람을 찾는다고 하면 db.customers.find({name: "Manu", age:30}); name에 대한 인덱스도 사용가능하고 name_age에 대한 인덱스도 사용 가능하다. 이와 같은 상황에서 mongoDB는 어떤 인덱스를 선택할까? db.customers.explain("allPlansExecution"). find({name:"Manu", age:29})를 실행하면 "winn..
covered query란? 일단 설명하기 위해 준비를 하자. 다음과 같이 2개의 documents를 넣어주고 name key에대해 single field index를 하나 준비한다. 이제 여기서 max라는 이름의 document를 찾는 과정을 관찰해보자. 쿼리를 진단하는 방법은 explain()메서다. db.customers.explain("executionStats").find({name: "Max"}) 자세히보면 inpuStage의 stage를 보면 단계를 알 수 있다. "IXSCAN" => "FETCH" executionStats key에는 전체 Examined된 documents개수와 returned된 개수를 알 수 있다. 만약 내가 "Max"라는 이름의 사람이 존재하는지만 알면된다면 그 사람에..
unique index에서 만약 값을 넣어주지 않는다면? unique인덱스를 생성 x를 일부러 입력하지 않으면 duplicate key error ! index: x_1에서 dup key: { x: null }이라고 나와있다. index는 다음과 같이 생겼을 것이고, [value:{ x:null, y:1}, pointer: address1 }] {value:{x:null, z:1}, pointer: address2}를 인덱스에 추가하려고 하니 에러가 발생했다. 만약 x값이 존재할 수도 있고 아닐 수도 있는 상황에서 x값이 존재할 때만 index를 만들 수는 없을까? 그럴 땐 partialFilterExpression 를 쓸 수 있다. x가 존재하는 document에 대해서만 index를 생성하겠다는 것이..
특정 시간이 지난 후에 알아서 DB에서 사라지게 만들고 싶다면 TTL Index를 고려해 볼만하다. What is TTL Index? TTL은 TIME TO LIVE의 약자. '살아있을 시간'이란 뜻에서 알 수 있듯이. 일정 시간이 지나면 expire 된다. TTL인덱스를 만드는 법: db.collection.createIndex({ : 1 }, { expireAfterSeconds: }) 1. eventlog라는 collection에 date객체를 가지고 있는 document를 하나 넣어두고 2. TTL인덱스 생성 3. document를 넣어주고 4. 10초 이상의 시간을 기다린 뒤 이와 같이 사라진 것을 알 수 있다. TTL의 한계: 1. '10초 이상의 시간' 나는 분명히 expireAfterSec..
- Total
- Today
- Yesterday
- 자료구조 #딕셔너리 #해시
- express-session
- alias
- Node.js
- 다중상속
- MongoDB
- instance method
- pm2 #cluster #Javascript
- resave
- Generator
- set
- saveUnitialized
- 집합
- 선형리스트
- map
- query helper
- 다형성
- 이중 연결리스트
- mixin
- static method
- 자료구조
- mongoose
- virtuals
- javascript
- index
- Iterator
- 맵
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |