복붙노트

[MONGODB] 생산 코드에 몽구스 색인

MONGODB

생산 코드에 몽구스 색인

MongooseJS 및 MongoDB를 / Node.js를위한 몽구스 문서 별 :

몽구스의 사전 배포하는 오토 인덱싱의 지시합니다 제거이 나타난다는 몽고 이해가 보인다 응용 프로그램 시작, 모든 인덱스를 통해 이동 및 이탈하도록 지시에서 몽구스를 최적화 할 수 있습니다.

생산 코드에 인덱싱 처리하는 적절한 방법은 무엇입니까? 아마 외부 스크립트는 인덱스를 생성해야합니까? 이 인덱스에게 DB 쓰기가 발생할 때마다 계속하기 때문에 하나의 응용 프로그램이 컬렉션에 유일한 리더 / 라이터 인 경우 아니면 ensureIndex은 불필요?

편집 : 보완하기 위해, MongoDB를이 수행하는 방법 색인에 대한 좋은 문서를 제공하지만,하지 왜하거나 명시 적 인덱싱 지시가 수행해야합니다. 인덱스가 자동으로 기존 인덱스 컬렉션과 ensureIndex 정말 더 일회성 것 (새로운 인덱스가 적용되는 경우 다)의 것을 작가의 응용 프로그램이 최신이 경우 몽구스의 자동 색인이해야 유지해야한다는 것을 나에게 보인다 일반 서버를 다시 시작 아래에는 조합 할 수 없습니다.

해결법

  1. ==============================

    1.몽구스 문서가 너무 광범위하게 생산 자동 색인을 사용하지 않도록 권장하는 이유는 이해 적이 없어요. 인덱스가 추가되면, 이후 ensureIndex 호출은 단순히 인덱스가 이미 존재하는 것을 볼 수 후 반환합니다. 먼저 인덱스를 생성하고,이 때의 컬렉션을 자주 비울 경우에만 성능에 영향을 그래서 이렇게 인덱스를 생성하는 것은 어쨌든 빠른 것입니다.

    몽구스 문서가 너무 광범위하게 생산 자동 색인을 사용하지 않도록 권장하는 이유는 이해 적이 없어요. 인덱스가 추가되면, 이후 ensureIndex 호출은 단순히 인덱스가 이미 존재하는 것을 볼 수 후 반환합니다. 먼저 인덱스를 생성하고,이 때의 컬렉션을 자주 비울 경우에만 성능에 영향을 그래서 이렇게 인덱스를 생성하는 것은 어쨌든 빠른 것입니다.

    나의 제안은 당신이 그것을 당신에게 문제를주고 특정 상황이없는 한 자동 색인을 사용할두고하는 것입니다; 이 문서의 수백만이있는 기존 컬렉션에 새 인덱스를 추가 할 당신이이 생성 때보다 효율적으로 관리를 원한다면있다.

  2. ==============================

    2.내가 허용 대답에 동의하지만, MongoDB의 설명서에 따라, 프로덕션 서버에 인덱스를 추가하는 권장되는 방법이 아니라고 지적 그 가치 :

    내가 허용 대답에 동의하지만, MongoDB의 설명서에 따라, 프로덕션 서버에 인덱스를 추가하는 권장되는 방법이 아니라고 지적 그 가치 :

    물론, 정말 응용 프로그램이 구성 및 배포 방법에 따라 달라집니다. 당신은 예를 들어, Heroku가에 배포, 당신은 Heroku가의 사전 부팅 기능을 사용하지 않는 경우, 다음은 응용 프로그램이 시작하는 동안 모두에서 요청을 처리하고, 해당 시간에 인덱스를 만들 아마 안전 그래서하지 않는 것 같다.

    이 외에도, 허용 대답에서 :

    당신이 당신의 데이터 모델 및 주변 처음에 못을 박았다 쿼리를 얻는 것을 처리 한 경우, 이것은 종종 경우 괜찮합니다. 당신이 인덱스없이 속성에 새로운 DB 쿼리를 사용하여 응용 프로그램에 새로운 기능을 추가하는 경우, 당신은 종종 많은 기존 문서를 포함하는 컬렉션에 인덱스를 추가하는 자신을 찾을 수 있습니다.

    이것은 당신이 추가 인덱스에 대한 조심, 조심스럽게 그렇게의 성능에 미치는 영향을 고려하는 데 필요한 시간입니다. 예를 들어, 백그라운드에서 인덱스를 만들 수 있습니다 :

    db.ensureIndex({ name: 1 }, { background: true });
    
  3. ==============================

    3.핸들 프로덕션 모드로이 블록의 코드를 사용 :

    핸들 프로덕션 모드로이 블록의 코드를 사용 :

    const autoIndex = process.env.NODE_ENV !== 'production';
    mongoose.connect('mongodb://localhost/collection', { autoIndex });
    
  4. from https://stackoverflow.com/questions/14342708/mongoose-indexing-in-production-code by cc-by-sa and MIT license