2010-03-09 8 views
10

Les structures de données hiérarchiques sont souvent stockées dans des bases de données relationnelles. Ce type de stockage est flexible mais plat, donc la structure arborescente doit être construite avec chaque requête. Je souhaite stocker les publications du forum sous la forme d'une arborescence, mais il devrait être possible d'interroger efficacement, par exemple en sélectionnant des publications par date ou par auteur. Je voudrais avoir une base de données open source accessible depuis Java.Comment stocker des structures arborescentes en Java?

Quelle est la meilleure façon de le faire? CouchDB? neo4j? ...?

+1

Que diriez-vous d'un ORM? –

+1

Un ORM rendrait la gestion plus pratique, mais la structure de données sous-jacente resterait toujours relationnelle et probablement la performance ne serait pas si bonne. – deamon

+0

Voir aussi: [Quelles sont les options de stockage des données hiérarchiques dans une base de données relationnelle?] (Http://stackoverflow.com/questions/4048151/what-are-the-options-for-storing-hierarchical-data-in- a-relation-base de données) – cbare

Répondre

7

Lorsque j'ai rencontré ce problème pour la première fois, j'ai trouvé le bon article (link).

En termes tho: dans le monde SGBDR il y a deux principales approches de stockage de modèle d'arbre:

  • La contiguïté Liste modèle
  • Le Nested Set Modèle
+0

L'article est uniquement disponible avec Oracle Login. – zellus

+0

Lien a été mis à jour (trouvé le même article dans un autre endroit) –

+0

merci pour la réaction rapide. – zellus

4

Voici un great article sur Neo4j. En général, il semble que neo4j est votre meilleure option puisque les bases de données de documents sont encore relativement plates et peuvent aboutir à awkward setup (encore faisable). Neo4j, étant une base de données graphique, devrait être un bon moyen de stocker votre arborescence. Je ne l'ai jamais utilisé, mais compte tenu de votre domaine de problème, il semble que la meilleure option (au moins celui d'enquêter en premier).

En ce qui concerne la "meilleure façon", je pense que cela dépend de votre implémentation et de vos exigences. Je pense que vous devriez écrire un test simple sur une base de données de graphes, une base de documents, un object database et une base de données relationnelle (ou pas) et voir lequel correspond au problème que vous essayez de résoudre.

Questions connexes