백그라운드 인덱싱
서비스 되고 있는 DB에 대한 접근을 중지시킬수 없다면, 인덱스가 백그라우드에서 구축되도록 할 수 있다.
- 백그라운드에서 인덱싱을 수행하더라도 쓰기 잠금은 걸리지만, 다른 읽기나 쓰기를 허용하기 위해 잠시 멈춘다. 따라서 어플리케이션이 DB연산을 많이 수행중이라면 백그라운드 인덱싱 성능은 떨어질 수 있다.
- 따라서 트래픽이 최소화인 시간에 하면 좋다.
db.values.createIndex({ user_type: 1 }, { background: true });
오프라인 인덱싱
백그라운드 인덱싱으로도 서비스중인 DB에 많은 부하가 생긴다면, 오프라인 인덱싱을 사용할 수도 있다.
- 일반적으로 한 복제 노드를 오프라인 상태로 바꾸고, 그 노드에 대해 인덱스를 구축한 다음 마스터 노드로부터 변경사항을 받는다.
- 변경사항 업데이트가 다 완료되면 이 노드를 Primary로 변경하고, 다른 노드들을 오프라인 상태로 바꾸고 다시 각자 오프라인 인덱스를 수행하는 방법이다.
- 다만, 오프라인 인덱싱이 수행될 동안 데이터 변경사항 손상을 막을 정도로 복제 oplog를 충분히 크게 잡아두어야한다.