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
Ceci est une base de données graphique. Peut être utilisé comme base de données arborescente.
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.
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
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/
Le plus courant est IMS d'IBM . Il y a aussi Cache Database
Voir cette question publiée sur la section dba de stackexchange.
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.
Exist-db modèle de données hiérarchique implémenté pour la persistance xml
LDAP, évidemment. OpenLDAP s'en passerait rapidement.
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.
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.
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).
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.