2012-03-05 3 views
4

현재 10 억 개 이상의 문서를 저장할 MongoDB 기반 시스템에서 작업 중입니다. 매달 약 5 천만 명이 증가 할 것입니다.매우 큰 데이터 세트를 가진 MongoDB 스케일링 및 메모리 사용

주 컬렉션의 ID는 YYYYMM_SOURCEID_DOCTYPE_UUID 형식이며 샤드 인덱스로 사용됩니다. 각 레코드는 약 1kb의 색인을 생성합니다. 가장 최근 3 개월 동안 데이터의 99 %가 발생합니다. 가장 최근의 3 개월간의 데이터에서 매우 우수한 실적을 보였고, 오래된 자료에 대해 최소한 반 성능을 발휘하여 문서의 키워드 검색을 지원하고자합니다.

인덱스를 메모리에 활성 상태로 유지할 수있는 한 MongoDB 사운드는 합리적인 해결책처럼 들립니까?

+0

MongoDB는 메모리 맵핑입니다. 이는 작업 세트를 메모리에 유지할 수 있다면 성능이 뛰어나다는 것을 의미합니다. – Ren

+0

그건 의미가 있습니다. 고맙습니다. – Josh

답변

2

샤드 키를 바꿀 것을 권합니다. 마지막 샤드를 으로 치는 것 같습니다. 키의 YYYYMM 비트가 모든 새로운 삽입을 "가장 오른쪽" 항상 샤드. http://www.mongodb.org/display/DOCS/Choosing+a+Shard+Key#ChoosingaShardKey-Cardinality에 대한 자세한 정보가 있습니다.

"키워드"필드의 카디널리티에 따라 해당 키를 샤드 키로 선택할 수 있습니다. 이렇게하면 mongodb은 하나의 샤드에서 키워드에 속한 모든 문서를 쉽게 가져올 수 있습니다. 모든 쓰기는 키워드별로 분할되어 있기 때문에 여전히 모든 샤드로 이동합니다.

"키워드"의 카디널리티가 매우 높지 않은 경우 (예 : < 100) 좋은 샤드 키는 아니지만 keywords_YYYYMM과 같이 연도와 월을 결합 할 수 있습니다.

+0

다른 문서 접근 패턴과 사용 방법에 따라 조금씩 다릅니다. 주석으로 추가하면 답변을 업데이트하겠습니다. – Derick

+0

샤드 키 방식은 위 링크의 '색인 최적화'섹션을 기반으로합니다. MongoDB는 서버간에 버킷을 분할 할 것이고 필요한 경우 조정할 수 있습니다. YYYYMM으로 시작하는 아이디어는 대부분의 활동이 b-tree의 한쪽 끝에서 발생하는지 확인하는 것입니다. 우리는 기본적으로 오래된 데이터에 대한 가끔 읽는 데이터로 지난 3 개월 동안 무작위 액세스가 필요합니다. – Josh

관련 문제