2013-07-08 4 views
24

이것은 기본적인 질문이지만 매우 중요합니다.MongoDB 캐시 시스템을 이해하십시오

공식 문서에서 우리는

MongoDB를가 RAM에 가장 최근에 사용 된 모든 데이터를 계속 읽을 수 있습니다. 쿼리에 대한 인덱스를 만들고 작업 데이터 세트가 RAM에 맞으면 MongoDB는 메모리의 모든 쿼리를 제공합니다. 당신이 당신의 쿼리에 인덱스를 생성하고 사용자의 작업 데이터 세트가 RAM에 들어가는 경우

내가 이해 모르겠습니다 부분은

여기에 "인덱스"무슨 뜻

입니다 ? 내가 모델을 업데이트 할 경우

는 예를 들어, 나는 그것을를 업데이트하기 때문에,이 메모리에서 올 것이다, 그래서 그것은 RAM 지금,하지만이 내 마음에 아주 명확하지 않다, 그것을 쿼리합니다.

우리는 어떻게 우리가 쿼리 datas 메모리에서 만들거나하지 않을 것이라는 확신 할 수

? 나는 MongoDB가 무료 메모리를 사용하여 순간적으로 무료 메모리에 대한 데이터를 캐시하지만 누군가가 전역 적 행동을 더 설명 할 수있을 것이라고 이해한다.

하는 경우 MongoDB를 캐시 시스템을 신뢰하는 것보다 datas를 저장하는 우리의 노드 서버에서 변수를 사용하는 것이 더 좋을 수 있을까?

어떻게 전 세계적으로 엄청난 트래픽에 MongoDB를를 사용하는 조언을합니까?

답변

21

좋은 장소 정확히 어떤 인덱스가 인을 이해하기 시작합니다 질문.

우리가 쿼리 한 데이터가 메모리에서 온 것인지 아닌지 어떻게 확인할 수 있습니까?

어떤 방법 으로든 yields 필드를 살펴 보는 것입니다. explain().이렇게하면 데이터가 RAM에 없기 때문에 독자가 잠금을 몇 번이나했는지 알려줍니다.

또 다른 방법은 mongostat과 같은 프로그램을 살펴 보는 것입니다. 이 프로그램은 mongod에서 어떤 페이지 오류 (디스크에서 RAM으로 페이징해야하는지)가 발생했는지 알려줍니다.

나는 MongoDB를 순간에 무료로 메모리에 대한 캐시 datas에 사용 가능한 메모리를 사용하지만, 누군가가 더 글로벌 행동을 설명 할 수 않는 것을 이해?

이것은 실제로 잘못되었습니다. 단지 MongoDB가 이것을한다고 말하는 것이 더 쉽지만 실제로는 그렇지 않습니다. 실제로 OS와 자체 페이지 알고리즘 (보통 LRU)은 MongoDB에서이 작업을 수행합니다. MongoDB는 일정 기간 동안 인덱스 계획을 캐시하지만 인덱스를 계속 검사하고 테스트 할 필요가 없습니다.

MongoDB 캐시 시스템을 신뢰하는 것보다 데이터를 저장하는 노드 서버에서 변수를 사용하는 것이 더 좋을 수 있습니까?

잘 모르겠다 ... 나는 두 가지가 상당히 다르다. MongoDB에서 시작했을 때 응용 프로그램에 데이터를 읽어 들이고 싶다면 분명히 추천하지 않을 것이다. .

게다가 메모리 관리를위한 OS 알고리즘은 매우 성숙하고 빠르므로 괜찮습니다.

거대한 트래픽에 대해 MongoDB를 어떻게 사용 하시겠습니까?

음, 이것은 아주 큰 질문입니다. 실제로이 주제에서는 Google을 조금 추천 해 드리 겠지만 문서에 따르면 작업 세트가 RAM에 적합하도록해야합니다. 여기

좋은 출발점이 될 것입니다 : What does it mean to fit "working set" into RAM for MongoDB?

5

MongoDB는 전체 콜렉션을 메모리에 유지하려고 시도합니다. 각 콜렉션 페이지를 메모리 맵핑합니다. 모든 것을 메모리에 저장하려면 데이터 페이지와이를 참조하는 인덱스를 모두 메모리에 저장해야합니다.

MongoDB가 레코드를 반환하면 메모리가 확보되었음을 확신 할 수 있습니다 (쿼리가 이전인지 인지 여부).

MongoDB를은, 말하자면, 웹 브라우저가하는 같은 방법으로 기록의 "캐시"를 유지하지 않습니다. 변경 사항을 적용하면 메모리와 디스크가 모두 업데이트됩니다. 적절한 사용 사례에 일치하는 경우

몽고는 입니다. 모든 것을 캐시하기에 충분한 서버 메모리가 있고 그 지점을 빠르게 지나면 성능이 저하되면 매우 고성능입니다. 대용량의 많은 웹 사이트는 MongoDB를 사용합니다. 메모리가 매우 저렴하다는 것이 좋습니다. 당신이 위로 솔질 한 후 그들이 그렇게 좋은 이유 http://docs.mongodb.org/manual/core/indexes/

당신은 더 복잡한 일부 앞으로 건너 뛰는 그러나 udersand됩니다

+0

는 "이 각 컬렉션 페이지를 메모리 매핑"그것은 그들이 두 개의 다른 것들, virutal 메모리에 물건 RAM하지 매핑하고이 사람들이 그런 일반적인 실수는, MongoDB를이입니다 in-memory 데이터베이스가 아닙니다! – Sammaye

+0

@Sammaye 가상 또는 실제 여부에 관계없이 메모리 주소에 매핑됩니다. Out-of-Core 주소가 참조되면 페이지 오류가 발생하고 해당 디스크 페이지가 실제 메모리로 이동됩니다. MongoDB는 서버가 가지고있는 모든 물리적 메모리를 거의 다 빨아 들일 것입니다 (OS 자체와 다른 프로세스에 대해서만 조금 남았습니다). MongoDB를 실행하려면 사용 가능한 실제 메모리가 데이터베이스 크기를 초과해야합니다. – Curt

+0

OS가 허용하기 때문에 메모리를 빨아 들일 것입니다. 그러나 작업 세트가 RAM에 저장되는 경우에만 작업 세트가 작다면 실제로 MongoDB는 데이터 크기보다 훨씬 작은 소량을 사용하게됩니다. – Sammaye

관련 문제