prosource

생산 코드의 Mongoose 인덱싱

probook 2023. 2. 27. 22:28
반응형

생산 코드의 Mongoose 인덱싱

Mongoose 매뉴얼에 따라MongooseJS ★★★★★★★★★★★★★★★★★」MongoDB/Node.js

프로그램이 를 호출합니다.ensureIndex각 정의된 인덱스에 대해 설명합니다.인덱스 작성은 퍼포먼스에 큰 영향을 미칠 수 있으므로 개발에는 편리하지만 실제 가동에서는 이 동작을 디세블로 하는 것이 좋습니다.을 무효로 , 을 합니다.autoIndex거짓

이는 Mongoose가 어플리케이션 부팅 시 모든 인덱스를 휘젓도록 Mongoose에게 지시하지 않도록 배치하기 전에 Mongoose에서 자동 인덱싱을 제거하도록 지시하는 것으로 보입니다.

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

편집: 보완하기 위해 MongoDB는 인덱싱 방법에 대한 좋은 문서를 제공하지만 명시적인 인덱싱 지시사항을 수행해야 하는 이유 또는 시기제공하지 않습니다.기존 인덱스가 있는 컬렉션에서 작성자 응용 프로그램에 의해 인덱스가 자동으로 최신 상태로 유지되어야 한다고 생각합니다.ensureIndex했을 때 ). 이 경우 (Mongoose의 것이 됩니다.이 경우 몽구스의autoIndex노옵시다

왜 '비활성화'를 하는지 이해할 수 autoIndex가동중중 중중중다다되면 그 의 「 」는, 「 」를 참조해 주세요.ensureIndex콜은 단순히 인덱스가 이미 존재하는 것을 확인한 후 반환됩니다.따라서 인덱스를 처음 생성할 때만 성능에 영향을 미치며, 이 때 컬렉션이 비어 있는 경우가 많기 때문에 인덱스를 빠르게 만들 수 있습니다.

하는 것은 남기는 입니다.autoIndex예를 들어 수백만 개의 문서가 있는 기존 컬렉션에 새 인덱스를 추가하고 작성 시기를 더 제어하려는 경우 등 문제가 발생하는 특정 상황이 아닌 한 활성화됩니다.

인정된 답변에 동의하지만 MongoDB 매뉴얼에 따르면 프로덕션 서버에 인덱스를 추가하는 권장 방법은 아닙니다.

응용 프로그램에 다음이 포함되어 있는 경우Index() 연산 및 기타 운영상의 우려에 대한 인덱스는 존재하지 않습니다.인덱스를 구축하면 데이터베이스의 성능에 심각한 영향을 미칠 수 있습니다.

성능 문제를 방지하려면 getIndexes() 메서드 또는 드라이버와 동등한 메서드를 사용하여 시작 시 응용 프로그램이 인덱스를 확인하고 적절한 인덱스가 존재하지 않으면 종료해야 합니다.지정된 유지 관리 기간 동안 항상 별도의 애플리케이션 코드를 사용하여 프로덕션 인스턴스에서 인덱스를 구축하십시오.

물론 애플리케이션의 구조와 도입 방법에 따라 달라집니다.예를 들어 Heroku에 배포하고 있고 Heroku의 사전 부트 기능을 사용하지 않는 경우 시작 시 응용 프로그램이 요청을 전혀 처리하지 않을 수 있으므로 인덱스를 만드는 것이 안전할 수 있습니다.

여기에 더해, 승인된 답변에서:

따라서 인덱스를 처음 생성할 때만 성능에 영향을 미치며, 이 때 컬렉션이 비어 있는 경우가 많기 때문에 인덱스를 빠르게 만들 수 있습니다.

데이터 모델 및 쿼리를 처음 확인했다면 이 방법으로 충분하며, 대부분의 경우 가능합니다.그러나 인덱스가 없는 속성에 새 DB 쿼리를 사용하여 앱에 새 기능을 추가하는 경우 기존 문서가 많이 포함된 컬렉션에 인덱스를 추가하는 경우가 많습니다.

이때 인덱스를 추가할 때 주의해야 하며 인덱스가 성능에 미치는 영향을 신중하게 고려해야 합니다.를 들어 백그라운드에서 인덱스를 생성할 수 있습니다.

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

다음 블록 코드를 사용하여 프로덕션 모드를 처리합니다.

const autoIndex = process.env.NODE_ENV !== 'production';
mongoose.connect('mongodb://localhost/collection', { autoIndex });

언급URL : https://stackoverflow.com/questions/14342708/mongoose-indexing-in-production-code

반응형