web-dev-qa-db-fra.com

Quel type de base de données NoSQL convient le mieux pour stocker des données hiérarchiques?

Quel type de base de données NoSQL convient le mieux pour stocker des données hiérarchiques?

Disons par exemple que je veux stocker les messages d'un forum avec une structure arborescente:

original post
 + re: original post
 + re: original post
   + re2: original post
     + re3: original post
   + re2: original post
67
deamon

Ceci est une base de données graphique. Peut être utilisé comme base de données arborescente.

http://neo4j.com/

17
Ripal Barot

MongoDB et CouchDB offrent des solutions, mais pas de fonctionnalités intégrées. Voir cette SO question sur représentant la hiérarchie dans une base de données relationnelle car la plupart des autres solutions NoSQL que j'ai vues sont similaires à cet égard; où vous devez écrire vos propres algorithmes pour recalculer ces informations au fur et à mesure que des nœuds sont ajoutés, supprimés et déplacés. De manière générale, vous décidez entre des temps de lecture rapides (par exemple ensemble imbriqué ) ou des temps d'écriture rapides ( liste d'adjacence =). Voir la question SO ci-dessus) pour plus d'options dans ce sens - approche de table plate apparaît la plus alignée avec votre question.

Un standard qui résume ces considérations est le Java Content Repository (JCR), les deux Apache JackRabbit et JBoss eXo sont des implémentations. Notez qu'en coulisse, les deux effectuent toujours une sorte de calcul algorithmique pour maintenir la hiérarchie comme décrit ci-dessus. En outre, le JCR gère également les autorisations, le stockage de fichiers et plusieurs autres aspects - il peut donc être exagéré pour votre projet.

31
orangepips

Vous avez peut-être besoin d'une base de données orientée document comme MongoDB ou CouchDB .

Voir des exemples de différentes techniques qui vous permettent de stocker des données hiérarchiques dans MongoDB: http://www.mongodb.org/display/DOCS/Trees+in+MongoDB

18
Maxim Gueivandov

Face au même problème, j'ai décidé de créer ma propre solution (très simple) en utilisant Lua + Redis https://github.com/qbolec/Redis-Tree/

3
qbolec
3
Gandalf

Les bases de données graphiques pourraient également résoudre ce problème. Si neo4j ne vous suffit pas en termes de mise à l'échelle, considérez Titan , qui est basé sur divers back-end de stockage, y compris HBase et devrait très bien évoluer. Ce n'est pas aussi mature que neo4j, mais c'est un projet très prometteur.

2
user1234883

Exist-db modèle de données hiérarchique implémenté pour la persistance xml

2
lisak

LDAP, évidemment. OpenLDAP s'en passerait rapidement.

2
hyc

En mathématiques, et plus précisément en théorie des graphes, un arbre est un graphe non orienté dans lequel deux sommets quelconques sont connectés par exactement un chemin . Donc, tout graphique db fera le travail à coup sûr. BTW un graphique ordinaire comme un arbre peut être simplement mappé à n'importe quelle base de données relationnelle ou non relationnelle. Pour stocker des données hiérarchiques dans une base de données relationnelle, jetez un œil à cette présentation impressionnante par Bill Karwin . Il existe également des ORM avec des installations pour stocker les arbres. Par exemple TypeORM prend en charge la liste d'adjacence et les modèles de table de fermeture pour stocker les structures hiérarchiques.

TypeORM est utilisé dans le développement TypeScript\Javascript. Vérifiez les ORM populaires pour en trouver un supportant les arbres en fonction de votre environnement.

Le roi des bases de données non relationnelles [IMHO] est Mongodb. Vérifiez que c'est documentation . pour savoir comment il stocke les arbres. Les arbres sont le type de graphique le plus courant et ils sont utilisés partout. Toute solution DB bien établie doit avoir un moyen de gérer les arbres.

1
pouya

Je viens de passer le week-end à un cours de formation utilisant MUMUPS db comme back-end pour un framework de développement d'applications de navigateur javascript à pile complète. Super truc! Je recommanderais la distribution GT.M de MUMPS sous GPL. Ou essayez http://sourceforge.net/projects/mumps/?source=recommended pour Vanilla MUMPS. Consultez http://robtweed.wordpress.com/ pour le framework js ewd.js et plus d'informations sur MUMPS.

0
chris topinka

Découvrez MarkLogic . Vous pouvez télécharger une copie de démonstration sur le site Web. Il s'agit d'une base de données pour les données non structurées et relève de la classification NoSQL des bases de données. Je sais que les données non structurées sont un terme assez chargé, mais pensez-y simplement comme des données qui ne correspondent pas bien aux lignes et aux colonnes d'un SGBDR (comme les données hiérarchiques).

0
Scott

Voici une non-réponse pour vous. SQLServer 2008 !!!! C'est idéal pour les requêtes récursives. Ou vous pouvez suivre l'itinéraire à l'ancienne et stocker les données de la hiérarchie dans une table séparée pour éviter la récursivité.

Je pense que les bases de données relationnelles se prêtent très bien aux données arborescentes. En termes de performances de requête et de facilité d'utilisation. Avec une mise en garde ... vous allez insérer dans une table indexée, et probablement plusieurs autres tables indexées chaque fois que quelqu'un fait un post. Les performances d'insertion peuvent être un problème sur un forum de calibre Facebook.

0
Lord Tydus