database - data - mysql recursive select
¿Los intervalos anidados son una solución viable para el conjunto anidado(recorrido de preordenamiento modificado)? ¿Degradación del rendimiento de RDBMS? (2)
Si bien he visto ejemplos de conjuntos anidados , no he visto mucho para los intervalos anidados, aunque en teoría no debería ser difícil convertirlos de uno a otro. En lugar de realizar un recorrido de prepedido para etiquetar los nodos, realice una recursión de primer nivel. El truco es encontrar la manera más eficiente de etiquetar n niños de un nodo. Como el nodo entre a / byc / d es (a + c) / (b + d), un inserto mal acondicionado (por ejemplo, insertando a los niños de izquierda a derecha), corre el riesgo de crear el mismo crecimiento exponencial en los valores de índice como, por ejemplo, usando una ruta completa materializada . No es difícil contrarrestar este efecto: cree los nuevos índices de a uno por vez, insertando cada uno en la ubicación que produzca el denominador resultante más bajo.
En cuanto a la degradación del rendimiento, mucho depende de las operaciones que pretendas hacer. Todavía hay algunas operaciones que requerirán un reetiquetado completo de todo el árbol: el conjunto anidado o los métodos de intervalo anidado funcionan mejor para las estructuras que rara vez cambian. Si realiza muchos cambios de estructura en la jerarquía, es más fácil trabajar con la estructura de tabla padre-hijo ''estándar''. recuerde también que algunas operaciones (como el número de descendientes) son mucho más fáciles con el etiquetado de enteros de conjuntos anidados que con los métodos de intervalo.
Entre las limitaciones conocidas de los conjuntos anidados de Joe Celko (recorrido de preordenamiento modificado) está marcada la degradación en el rendimiento a medida que el árbol crece a un tamaño grande.
Vadim Tropashko propuso intervalos anidados, y proporciona ejemplos y explicaciones teóricas en este documento: http://arxiv.org/html/cs.DB/0401014
¿Es esta una solución viable? ¿Hay algún ejemplo viable (en cualquier idioma) abstraído de la capa DB nativa?
He escrito una gema que abstrae todos los cálculos de intervalos anidados que se utilizarán con ActiveRecord de Rails https://github.com/clyfe/acts_as_nested_interval/ utilizado en producción en varios sistemas.