2012-01-10 3 views
1

게임을 만들고 있습니다. 게임의 일부는 객체를 수집하는 것입니다. 카테고리의 각 객체가 속성을 갖도록 "다양성"에 대한 점수를 얻습니다. 특정 속성이있는 객체를 수집 한 경우 해당 속성에 대한 배율은 해당 속성이있는 다른 객체에 더 이상 적용되지 않습니다. 포인트는 수집 한 각 속성의 모든 unqiue 값을 결합한 다음 해당 속성의 계수를 곱하여 계산됩니다. 예 :오브젝트 수집 게임을위한 MongoDB 알고리즘

Points 
Category: Toys 
Base: 2 
Shape: 7 
Material: 10 
Color: 5 

Bouncy ball:    Snow Globe: 
category: sphere   category: sphere  
shape: round    shape: round 
material: rubber   material: glass 
color: swirls   color: clear 

Collected: 
bases = my_objects.length * base = 2 * 2 = 4 
shapes = array('round').length * 7 
materials = array('rubber', 'glass') * 10 
color = array('swirls', 'red') * 5 

score = bases + shapes + materials + color = 4 + 7 + 20 + 10 = 41 

개체는 nosql 문서 (mongodb)로 저장됩니다. 내 질문은 수집되지 않은 개체가 사용자의 점수에 가장 많은 점수를 부여하는 순서대로 데이터베이스에서 나머지 개체를 모두 선택하는 가장 좋은 방법입니다. 점수 문서 전체와 다음 당신이 내림차순으로 정렬 할 수 있습니다

답변

0

문제를 자세히 조사 할 때 내 목표는 부적절한 것 같습니다. 다른 것을 모으 자마자, 객체가 가장 많은 점수를 얻는 전체 순서가 크게 바뀔 것이므로, 우선 순위를 매기는 것이 중요하지 않습니다.

0

상점은

(원하는 경우 인덱스를 사용)를 할 수없는 그 가능성이 몽고에서 아직 그래서 "는이 + B + C 정렬" 최상의

+0

각 문서의 점수는 로그인 한 사용자와 이전에 수집 한 사용자에 따라 다릅니다. 문서에 저장하면 사용자가 새 객체를 수집 할 때마다 수백만 개의 객체에 대한 점수를 다시 계산해야합니다. – chris

관련 문제