프로젝트에서 MongoDB 문제가 발생했는데, 며칠이 지나도 여전히 문제를 해결할 수 없습니다. 전문가의 조언을 구하고 싶습니다.
구체적인 문제는 데이터베이스에 오랫동안 액세스하지 않은 경우 데이터베이스의 첫 번째 쿼리에는 시간이 오래 걸리지만 후속 쿼리는 매우 빠르다는 것입니다.
세부정보:
현재 고려되는 이유:
으아아아도움이 필요함:
으아아아phpcn_u15822017-05-02 09:28:08
말씀하신 문제는 작업 세트와 관련된 문제입니다.
1. 워킹셋이란?
MongoDB의 메모리 관리에 있어서 중요한 개념입니다. 메모리 관리에서는 자주 액세스하는 데이터 세트 및 관련 인덱스를 메모리에 배치하십시오.
2. 작업 세트를 메모리에 배치하는 방법은 무엇입니까?
귀하의 설명에서는 실제로 작업 세트를 미리 예열하고 메모리에 배치해야 함을 의미합니다(예비 로드 또는 예열). 구체적으로 어떻게 해야 할까요? 터치(MMAP 엔진)를 언급했는데 후속 버전(WT 엔진)에서는 어떻게 구현하나요?
관계형 데이터베이스라면 자주 사용하는 방법은 select *입니다. 성능 테스트를 할 때 좋은 결과를 얻기 위해 일괄적으로 Select 문을 미리 실행하여 메모리를 워밍업하는 경우가 많습니다.
MongoDB에서는 다음을 고려하세요.
1) Covered Index를 비즈니스 쿼리에 직접 사용할 수 있거나 인덱스를 워밍업해야 하는 경우:
db.collection.find({}, {"_id" : 0, "field_a" : 1, "field_b" : 1}).hint({"field_a" : 1, "field_b" : 1}). 설명()
2) 작업 세트를 예열해야 하는 경우 컬렉션의 어떤 데이터에 일반적으로 특정 기간 동안 자주 액세스해야 하는지 아는 것이 전제입니다. 그런 다음 이 컬렉션에 대해 위와 동일한 방법을 사용합니다. 워밍업하는 기간.
차이점은 인덱스를 예열하면 모든 인덱스가 예열되므로 쿼리 조건은 {}인 반면, 작업 세트를 예열하면 컬렉션의 데이터 중 특정 부분만 예열되므로 쿼리 조건은 시간과 관련된 조건이 될 수 있습니다. 범위.
참고로.
MongoDB를 사랑해주세요! 재미있게 보내세요!
MongoDB 중국 커뮤니티 심천 사용자 컨퍼런스
이번 토요일에 약속잡자
자세한 내용을 입력해주세요