2012-08-23 2 views
1

우리는 많은 필드를 검색 할 수있는 몽고 컬렉션을 가지고 있습니다. & 예를 들어 (미안 해요 때문에 비밀에 실제 수집을 넣을 수 없습니다)를,의를 보자 :MongoDB - 많은 순열을 가진 검색 엔진

MathProblem 
{ 
    Creator : String, 
    Difficulty : integer (from 0 to 4), 
    Categorie : integer (from 0 to 40), 
    NbOfQuestion : integer (less than 20), 
    Likes : integer, 
    Dislikes : integer, 
    Succeeded : integer, 
    Failures : integer 
} 

우리는 창조주, 난이도, Categorie, NbOfQuestion에 검색 할 수 있습니다. 좋아하는 것, 싫어하는 것, 성공한 것, 실패한 것을 정렬합니다.

예 :

  • 가 categorie 20 종류 그들을 좋아하는 한국인에 의해 으로, 나에게 어려움 3의 문제를주십시오.
  • 다섯 가지 질문에 대한 문제점을 오류로 분류하십시오.
  • 어려움 1, 카테고리 10, 질문 2 개에 문제가 생겨서 Einstein이 (가) 작성했습니다.
  • 모든 문제는 Succeeded별로 정렬 해주십시오.

기타 ... 모든 순열이 가능하며 한 필드에서 옵션 정렬이 가능합니다.

여기의 문제는 수백만 개의 레코드가 있다는 것입니다. 색인 생성은 적어도 30 기가를 소비했습니다. 또한 색인이 너무 많기 때문에이 모음집에서 쓰기 속도를 크게 떨어 뜨립니다. 그리고 그것은 글씨를 분쇄하는 동안, 그것은 독서를 잠그고 있습니다. 그래서 우리는 많은 양의 글을 쓸 수 있으며 글쓰기는 적지 만 여전히 많이 쓰고 있습니다.

"검색 엔진 솔루션"을 검색하지만 필자의 경우가 아닌 "전체 텍스트 검색"에서만 찾을 수 있습니다.

우리는 어려움 인 Categorie와 NbOfQuestion을 하나의 배열에 병합 (이 값을 10 개의 요소로 유지하여 appart로 유지)하여이 배열에서만 색인을 생성하고 약간의 공간을 절약하려고했습니다.

아무쪼록 잘 부탁드립니다.

감사합니다,

찰스

+1

들이 완벽하게 적합 http://www.mongodb.org/display/DOCS/How+does+concurrency+work

건배,

다윗을 찾을 수 있습니다 귀하의 유스 케이스. 난 faces, 정렬 등 comples searchpages에 광범위하게 (그리고 2 년 동안 SOLR을 사용했다.) –

+0

나는 ElasticSearch에 관해서 조금 읽었지만 어떻게 동작하는지에 대한 성능/메모리 분석을 보지 못했다. 많은 색인. – ThePainnn

+0

내 셀에서 빠른 하나 : 정보가 많이 있어야하는 lucene 색인 성능을 찾으십시오. –

답변

0

찰스,

문제에 간단한 해결책이 없습니다. 아마도 지금은 MongoDB의 샤딩 기능을 사용하여 바깥쪽으로 확장하는 것이 가장 좋은 해결책 일 것입니다. http://www.mongodb.org/display/DOCS/Sharding+Introduction

목표는 하나의 쓰기로 "뭉개 진"데이터 양을 줄이기 위해 여러 컴퓨터에 작업 세트를 분할하는 것입니다. 또한 최소한의 MongoDB v 2.0.7로 업그레이드 할 것을 제안 할 수 있습니다. 2.X 분기에서 yield-on-long-operation과 yield-on-page-fault와 같은 많은 새로운 기능이 있습니다. 시스템에 쓰기 잠금의 영향. MongoDB의 동시성에 대한 자세한 정보는 SOLR/Elasticsearch이 (모두 루씬의 지원) (가있는) 전체 텍스트 검색 엔진으로 판매하고 있지만

+0

예 샤딩은 솔루션, 원시 전력 솔루션입니다. 나는 DBA가 아니므로 직각으로 문제를보고 있는지 궁금해하고있었습니다. – ThePainnn