2013-03-15 5 views
1
class Job 
    field :occupation, :type => String 
    field :experience, :type => String 
end 

Dans mon fichier api:Optimize requête MongoDB/MongoId

get :searches do 
    Cv.search({query: "*#{params[:q]}*"}).map{ |cv| {id: cv.id, text: cv.occupation } } 
end 

Cela génère un fichier JSON:

[{"id":"513dbb61a61654a845000005","text":"industrial engineer"},{"id":"513a11d4a6165411b2000008","text":"javascript engineer"}] 

J'utilise mongodb comme base de données et MongoId comme ORM/odm.

Ce fonctionne bien avec 10 ou 100 ou 1000 résultats, mais ma question est de savoir si est possible d'optimiser la requête api pour les grandes collections de données * ou 1.000.000 2.000.000 des résultats. *

+0

Peut-être que cela pourrait aider: http://docs.mongodb.org/manual/applications/optimization/ – fmendez

+0

Merci, pouvez-vous coller un exemple avec MongoId? Je vous remercie! – hyperrjas

Répondre

0

En fonction de votre requête, si vous souhaitez interroger sur occupation vous devez créer un index sur occupation

class Job 
    include Mongoid::Document 
    field :occupation, :type => String 
    field :experience, :type => String 
    index({ occupation: 1 }) 
end 

MongoId crée automatiquement et index sur _id donc si vous incluez toujours dans votre requête, il restera rapide, à moins que vos index de base de données commence à dépasser le RAM disponible.

Job.where(:occupation => "javascript engineer") utilisera l'indice