2008-12-11 4 views
11

Parmi les limitations connues des ensembles imbriqués de Joe Celko (traversée de pré-commande modifiée), il y a une dégradation marquée de la performance à mesure que l'arbre grandit.Les intervalles imbriqués sont-ils une solution viable pour la dégradation des performances des SGBDR par jeu d'ensemble imbriqué (traversée pré-commande modifiée)?

Vadim Tropashko les intervalles prévus imbriqués, et fournit des exemples et des explications de la théorie dans cet article: http://arxiv.org/html/cs.DB/0401014

Est-ce une solution viable, y at-il des exemples viables (dans toutes les langues) abstraire loin de la couche de DB natif?

+0

Jetez un oeil à ma question: http://stackoverflow.com/questions/1049748/improving-nested-sets-modified-preorder-tree-traversal S'il vous plaît commenter là si vous le souhaitez. Je suis en train de faire des recherches sur cet espace maintenant. –

+0

C'est une idée incroyablement ingénieuse, je vais le donner. Mais est-il vraiment plus rapide que les pointeurs parents dans une base de données qui supporte les requêtes récursives, comme le font les récentes versions de toutes les bases de données sérieuses (tout sauf MySQL!)? –

Répondre

7

While I've seen examples for nested sets, je n'ai pas vu grand-chose pour les intervalles imbriqués, bien qu'en théorie il ne devrait pas être difficile de convertir de l'un à l'autre. Au lieu de faire une traversée de pré-commande pour étiqueter les nœuds, faites une récursion de première grandeur. L'astuce consiste à trouver le moyen le plus efficace d'étiqueter n enfants d'un nœud. Puisque le nœud entre a/b et c/d est (a + c)/(b + d), un insert mal conditionné (par exemple, insérer les enfants de gauche à droite), risque de créer la même croissance exponentielle dans les valeurs d'index comme, par exemple, en utilisant un materialized path complet. Il n'est pas difficile de contrer cet effet - créer les nouveaux index un à la fois, en insérant chacun à l'endroit qui produit le dénominateur résultant le plus bas.

En ce qui concerne la dégradation des performances, beaucoup dépend des opérations que vous avez l'intention de faire. Il y a encore quelques opérations qui nécessiteront un ré-étiquetage complet de l'arbre entier - l'ensemble imbriqué ou les méthodes d'intervalle imbriquées fonctionnent mieux pour les structures qui changent rarement. Si vous faites beaucoup de changements de structure dans la hiérarchie, la structure de la table parent-enfant 'standard' peut être plus facile à utiliser. rappelez-vous également que certaines opérations (telles que le nombre de descendants) sont beaucoup plus faciles avec l'étiquetage d'entiers d'ensembles imbriqués que les méthodes d'intervalle.

Questions connexes