mongoDB는 분산 확장을 염두에 두고 설계됐다.
mongoDB에서는 동시성(concurrency)와 처리량을 극대화하기 위해 WiredTiger storage Engine에 opportunistic locking 사용.
(3.1.1)
여러 도큐먼트를 삽입 시, insertMany로 삽입하면 db를 왕복하지 않고 document를 대량 삽입하므로 훨씬 효율적.
(3.3)
갱신은 원자적으로 이루어지므로 요청 두개가 동시에 발생하면 서버에 먼저 도착한 요청이 적용된 후 다음 요청이 적용
(129, 138)
sort 가 필요할 땐, 결과를 반환하기 전에 mongoDB가 메모리에서 정렬을 함으로 비효율적일 수 있다.
쿼리 플랜에 “SORT” 단계가 있다면 인덱스를 사용 못하고 인메모리 정렬을 했다는 뜻
(130)
각 인덱스 후보에 하나씩 총 3개의 쿼리플랜을 만들고 병렬 스레드에서 동시에 각각 돌려 결과 확인.
서버는 쿼리 플랜의 캐시를 유지하는데, winning plan은 이후 모양이 같은 쿼리에 사용하기 위해 캐시에 저장.
(163)
$or 쿼리는 두개의 쿼리를 수행하고 결과를 합치므로 각 절마다 하나씩 인덱스를 사용할 수 있다.
(205)
아틀라스 전문 검색 인덱스는 apache lucene을 활용해 추가적인 검색 기능을 구현
(293)
애플리케이션을 최적화하려면 읽기와 쓰기 성능을 분석해 어느 것이 병목 현상을 일으키는지 알아야 한다.
읽기 최적화는 일반적으로 올바른 인덱스의 사용