2012-02-05 9 views
1

Je suis assez nouveau pour mongodb. Je crée une application web qui permet l'insertion et la recherche de plusieurs produits tels que laptop, hard driver, webcamm ... Ma question est de les placer tous dans une même collection comme "computer" ou devrais-je placer chaque produit dans leur propre collection comme "ordinateur portable", "pilote dur", "webcam" de sorte que lorsque la recherche de l'utilisateur et insérer pour un produit, il sera plus rapide?devrais-je créer une ou plusieurs collections dans mongodb pour insérer et rechercher plus rapidement?

Merci beaucoup

Répondre

2

En général, vous devez utiliser une langue collection par « type » de chose que vous stockez. Il semble que tous les exemples que vous avez donnés ci-dessus relèvent d'un «type» de produit et devraient être dans la même collection. Les documents de la même collection ne doivent pas tous avoir les mêmes champs, mais pour les produits, vous aurez probablement plusieurs champs communs à tous les documents: nom, prix, fabricant, etc. chaque document "sous-type" peut avoir plusieurs champs en commun, comme les disques durs peuvent tous avoir RPM, capacité de stockage, facteur de forme, interface (SATA2/3, IDE, etc).

La justification de ce conseil est que les requêtes MongoDB sont effectuées sur une seule collection à la fois. Si vous souhaitez afficher les résultats de recherche qui couvrent les différentes catégories de produits que vous avez, alors c'est simple avec une collection, mais plus difficile avec plusieurs (et moins performant).

En ce qui concerne les performances de requête, veillez à créer des index sur les champs que vous recherchez. Si vous autorisez la recherche par nom de produit ou par fabricant, vous auriez un index sur le nom et un autre index sur le fabricant. Vos index exacts varieront selon les champs que vous avez dans vos documents. D'autre part, la vitesse d'insertion sera plus rapide avec moins d'index (puisque chaque index doit potentiellement être mis à jour chaque fois que vous enregistrez ou mettez à jour un document), il est donc important de ne pas créer plus d'index que vous. J'aurai vraiment besoin.

Pour plus d'informations sur ces sujets, consultez les documents MongoDB sur schema design et indexes, ainsi que les presentations on 10gen.com sur les haut-parleurs 10gen et les utilisateurs MongoDB.

1

Je suggère de commencer avec une collection. Il est beaucoup plus simple de chercher dans une collection plutôt que dans une collection par produit. Et à l'avenir, si vos requêtes contre la collecte deviennent lentes, vous pouvez commencer à réfléchir à la manière de les accélérer. Mongodb a assez rapide indexes et il a été conçu pour être évolutif, donc une fois que vous aurez besoin de mettre à l'échelle votre base de données - replica sets et auto sharing en place.

Questions connexes