2010-12-09 45 views
0

Je crée une application Web pour le stockage de signets avec un système de répertoire. J'ai déjà ces collections mis en place:Base de données (MongoDB) question de performance

  • Chemin (s)
    ---> Annuaires (documents intégrés)
    ---> Liens (documents intégrés)

  • utilisateur (s)

donc la performance sage, dois-je:
- ajouter l'ID utilisateur sur le chemin créé
- Intégrer la totalité de la collection Les chemins dans l'utilisateur spécifique

Je veux choisir l'option 2, mais oui, je ne sais pas ...

EDIT:
Je pensais aussi à faire toute l'interface ajaxified. Donc, cela signifie que je vais charger les répertoires et les liens d'un chemin spécifique (à partir de l'utilisateur connecté) via ajax. De cette façon, c'est plus rapide et je n'ai pas besoin de toucher la collection d'utilisateurs. Peut-être que cela change les choses?

Comme je l'ai dit dans les commentaires, 1 énorme collection dans la base de données entière semble un peu étrange. Droite?

Répondre

1

Eh bien, le but principal de la MongoDB est de soutenir data.I redondantes recommanderons deuxième option est mieux parce que dans votre scénario ce que je pense que si vous intégrez la collecte de chemin dans l'utilisateur spécifique, en utilisant uniquement vous requête unique peut obtenir toutes les données sur l'utilisateur ainsi que liées à la collection de chemins. Et si vous suivez la première option, vous devez déclencher deux requêtes séparées pour obtenir toutes les données, ce qui augmentera quelque peu votre travail. Comme mongodb apporte des données dans la mémoire vive, après avoir obtenu les données d'une collection, vous pouvez les stocker dans le curseur et à partir de ces données, vous pouvez récupérer les données d'une autre collection. Donc, si nous voyons la performance sage, je ne pense pas que cela affectera beaucoup.

+0

Merci pour votre réponse. Cela semble un peu étrange, d'avoir une seule grande collection dans la base de données. N'est-ce pas? Oh, et il y a autre chose .. Je vais éditer la question ... – Icid

+1

@Icid Logiquement votre base de données peut grandir à n'importe quelle taille en fonction de votre taille de stockage, donc ne vous inquiétez pas à ce sujet et sur les énormes collections si vous effectuez l'indexation alors vous obtenir des résultats plus rapidement.Si vous voulez faire de l'indexation, alors utilisez solr comme des choses parce que mongodb fournit également l'indexation, mais cela va soudainement augmenter la charge d'opération sur votre DB. Si encore vous avez un doute en deuxième approche alors vous pouvez aller à la première approche et faire une deuxième requête sur le curseur qui a été expliquée plus tôt par moi. – Rupeshit

1

RE: l'édition. Si vous voulez tout stocker dans un seul document et utiliser des documents intégrés, lorsque vous effectuez vos requêtes, assurez-vous de simplement sélectionner les données dont vous avez besoin, sinon vous chargerez tout le document, y compris les documents intégrés.

+0

Comme ça? current_user.paths.where (: location => '/ directory') .première – Icid

+0

Dépend de votre OM, Avec mongoid e.g. current_user.paths.where (: emplacement => '/ répertoire') .only (: id,: nom) – MatthewFord