2011-08-30 3 views
4

MongoDB를 'DB 엔진'으로 사용하는 웹 사이트에 제품 방문 카운터를 쓰고 있습니다.MongoDB 캐싱 카운터

Here 몽고는 메모리에 자주 액세스하는 것을 유지하고 통합 메모리 내 캐싱 엔진이 있다고합니다.

그래서이 통합 캐싱 시스템을 중계하고 매 방문마다 카운터를 잘못 설정하거나 트래픽이 많은 환경에서 다른 캐싱 계층이 필요합니까?

답변

5

두 개의 별개입니다. MongoDB는 설계 상 메모리에 매핑 된 디스크 공간 중 가장 많이 액세스 된 부분을 메모리에 유지하는 간단한 페이징 메모리 관리 시스템을 사용합니다.

이렇게하면 자주 요청되지만 자주 변경하지 않는 카운터에 도움이됩니다. 불행히도 웹 사이트 카운터의 경우이 두 가지는 상호 배타적입니다. 증가하는 카운터는 일반적으로 MongoDB가 디스크에있는 카운터를 보유한 문서를 이동시키지 않기 때문에 읽기 캐싱은 여전히 ​​상당히 효과적입니다.

기본적으로 문제는 글을 쓰는 것입니다. 기본적으로 방문당 ​​증가하는 것은 비용 효과적이지 않을 것입니다. 귀하의 카운터 웹 응용 프로그램이 들어오는 방문을 캐시하고 모든 X 방문 또는 Y 초마다 카운터 업데이트 만 푸시하는 전략을 제안합니다. 귀하의 주요 목표는 초 당 쓰기 수를 줄이는 것이므로 카운터 방문 당 DB 쓰기를 원하지 않습니다.

+0

나는 모든 X 분 또는 Y 페이지 히트를 세션에서 광고 방문을 저장하고 서버에 소비하기로 결정 씁니다. Dank u wel. – thwd

1

비록 난 당신이, 나는 다음을 수행 할 기술 시스템의 종류에 일한 적이있다 (내가 제대로 질문을 읽고 가정을하고 실제로 수행하는 것이 단순히 각 방문에 대한 카운터를 증가 할) .

  • 는 원자 적 점진을 수행 할 수 $inc 연산자를 사용하거나이 있지 않은
  • 를 사용하여 적절한 쓰기 우려 경우 그 안전 할 경우 (업데이트 속도를 문서 구조를 만들 upserts with modifiers를 사용 즉, Write Concernn of NONE을 사용하면 업데이트 요청이 즉시 반환되고 Mongo를 디스크에 유지하기 만하면됩니다. 물론 이것이 안전한지 여부는 유스 케이스에 달려있다. 수백만 건의 히트를 기록한 경우 1 건의 히트가 문제가되지 않을 수 있습니다.
  • 당신이 저장하는 데이터의 규모가 진정으로 엄청난 경우, 파티션에 샤딩을 사용하여 조사는