2014-05-14 7 views
2

Je travaille sur des données hiérarchiques, comme dans l'arborescence. Je veux savoir quelle est la meilleure façon de les stocker dans la base de données. J'ai commencé avec la liste d'adjacence, en MySQL. Mais la performance semble baisser à mesure que les données augmentent. J'ai environ 20 000 lignes stockées dans une table MySQL avec une relation parent-enfant et augmentera dans le futur. Récupérer des données prend beaucoup de temps car je dois écrire plusieurs auto-jointures en fonction de la profondeur de l'arbre. Je cherchais donc le meilleur moyen de stocker ce type de données. Dans une fois, j'ai trouvé que les jeux imbriqués sont meilleurs que les listes d'adjacence. Ensuite, on m'a conseillé de regarder NoSQL, si cela pouvait résoudre mon problème. Je suis donc confus maintenant de rester en SQL ou de passer à No SQL ou s'il existe un autre moyen de gérer ce type de données.Stockez les données hiérarchiques de la meilleure façon: NoSQL ou SQL

Donc, quelqu'un peut me suggérer quelle est la meilleure façon?

+0

Comment avez-vous l'intention de manipuler vos données? Avez-vous besoin d'une forte cohérence ou d'une performance sur un type particulier d'opération? Voulez-vous SQL? – LMeyer

+0

J'ai besoin de meilleures performances, car j'utilise beaucoup de jointures dans mes requêtes SQL. J'utilise déjà MySQL. J'ai l'intention d'avoir beaucoup de lectures, que d'écrire dans la base de données. – Kushi

Répondre

3

Si MySQL vous donne plus de problèmes qu'il ne résout, je jetterai un oeil à MongoDB, CouchDB ou ElasticSearch (selon votre cas d'utilisation). Peut-être même Neo4j. Votre choix devrait se ramener à plusieurs points tels que la réplication, la capacité de mise à l'échelle, la cohérence ... Je vous conseille de lire attentivement certaines documentations officielles avant de vous décider. Voici un starting point pour comparaison.

NoSQL Going va se débarrasser de toutes les jointures et améliorer vos performances, mais vous aurez toujours besoin de mettre en œuvre une hiérarchie appropriée en utilisant la liste de contiguïté, ensembles imbriqués, matérialisé chemins et tels ...

Gardez à l'esprit NoSQL Les technologies ci-dessus utilisent presque toutes la cohérence finale, ce qui signifie essentiellement que vos données peuvent ne pas être cohérentes à un moment donné entre certains nœuds. Si c'est un problème, vous devriez vous en tenir au SGBDR.

+0

Merci pour votre réponse. Mais je n'ai pas compris ce que vous entendiez par ** les données peuvent ne pas être cohérentes **. Pouvez-vous s'il vous plaît me donner un exemple !! – Kushi

+0

@Kushi Elle fait référence à la propriété de cohérence dans le théorème CAP. Vous pouvez lire [this] (http://stackoverflow.com/questions/5466012/nosql-and-eventual-consistency-real-world-examples) pour des explications. – LMeyer

Questions connexes