2010-09-20 6 views
2

Je suis à la recherche de quelques recommandations sur la façon de structurer la partie balises de ce modèle de données:Recommandations sur la structure pour MongoId/MongoDB Arbre de tags

Voici une version simplifiée de celui-ci:

  • une Le site a beaucoup de messages (association relationnelle [références_many en parlant mongoïde]). Un site a un arbre de balises
  • un message a un tableau de balises (sous-ensemble des balises du site, l'ordre n'a pas d'importance)

Les cas d'utilisation Je me soucie sont:

  1. Enregistrement rapide des balises & du site sous forme d'arborescence (c'est-à-dire pour pouvoir les afficher sous la forme d'un arbre dans l'interface utilisateur)
  2. Recherche rapide des postes du site ayant un tag particulier.

Sans la structure arborescente, http://github.com/wilkerlucio/mongoid_taggable résout mes cas d'utilisation. Je l'ai vu quelques-uns des ports acts_as_tree pour MongoId aiment:

Ils semblent tous adopter une approche relationnelle, par opposition à intégré, au stockage la hiérarchie, ce qui signifierait que les deux cas d'utilisation ci-dessus seraient lents (nécessitant probablement une carte/réduire).

Quelqu'un at-il fait quelque chose de similaire, ou avez-vous des conseils? Idéalement, j'adorerais une solution Mongoid, mais je suis également heureux de me rendre au driver Ruby.

Répondre

2

Avez-vous besoin de mettre à jour la structure de l'arborescence (c.-à-d. Déplacer un tag vers un autre parent)? Si cela est possible, l'approche intégrée deviendrait difficile, et l'approche relationnelle/normalisée prend plus de sens.

Je stockerais probablement les étiquettes elles-mêmes dans le document (incorporé), mais s'il y a une chance que je doive déplacer des nœuds d'arbre autour en ligne, alors je stockerais la hiérarchie dans un autre document. Les requêtes ne doivent pas être lentes, si vous aplatissez d'abord la requête de recherche (en fonction de l'arborescence actuelle), puis recherchez ces balises. Cette approche n'est probablement pas bien adaptée si la requête de recherche aplatie finit par contenir des centaines d'étiquettes (quelle est la taille de votre arbre?).

Si les tags ne peuvent pas être déplacés vers de nouveaux parents (ou seulement par vous, lors de la maintenance planifiée), allez de l'avant et intégrez la hiérarchie entière.

+0

Merci Thilo. Les tags ne peuvent pas être déplacés. L'arbre entier peut être supprimé/recréé périodiquement. Encore une fois c'est plus facile intégré. Je pense donc à le modéliser très simplement. Les sites stockent un tableau imbriqué (arbre) de tags et Posts stocke un tableau de tags. Le stockage/extraction du tableau imbriqué sera rapide (atomique) et l'interrogation de la collection Posts sera relativement simple car il s'agit d'une requête simple dans le tableau de balises. Merci pour l'aide – Nader

+0

Oui, ça sonne bien. Fais ça. – Thilo

Questions connexes