2011-11-08 13 views
6

Estoy construyendo una aplicación web que debe tener una alta carga de escritura y miles, incluso millones de registros jerárquicos que representan árboles definidos/construidos por el usuario. No estoy intentando construir un foro con hilos, sino una gran base de datos con miles de jerarquías de pequeño tamaño (árboles con hasta 10-20 descendientes) ...Almacenamiento de datos jerárquicos en MySQL con alta carga de escritura

Conozco muchos modelos para almacenar jerarquías, actualmente estoy usando Conjuntos anidados pero el rendimiento con enormes datos y carga es un problema. También dudo que las listas de adyacencia o algo similar puedan resolver esto.

He estado experimentando con la base de datos de Mongo, que es almacenamiento superrápido de clave/valor, pero solo puedo usar MySQL.

Me gustaría conocer las experiencias de otras personas con problemas similares.

+0

¿Puedes aclarar un poco? ¿Desea almacenar todo esto y consultar las jerarquías? ¿Cómo vas a hacer tus consultas? –

Respuesta

5

Si puede instalar complementos de MySQL, entonces el motor de almacenamiento OQGraph es lo que necesita.

+1

+1 Sin embargo, la instalación de un complemento no está abierta para todos. Es por eso que he otorgado la recompensa a @barryhunter – Johan

+0

Gracias de todos modos;) Recuerda, mientras más personas sepan acerca de OQGraph, antes podremos verlo como parte de las instalaciones predeterminadas en compañías de alojamiento :) – Mchl

4

¿Cuál es el problema con los conjuntos anidados?

¿Está recalculando los valores lft/rgt cuando agrega o quita nodos?

Bastante seguro con un poco de planificación cuidadosa, puede ajustarlo así que solo tiene que hacer recuentos raros. No lo he intentado en realidad, pero hice una planificación para un sistema una vez (¡el cliente no quería el sistema al final!)

Uno, multiplica los valores, por ejemplo, 1000 cuando se calculan por primera vez. Luego, si agrega un nodo, puede simplemente insertar números entre los valores. Solo cuando hay una gran cantidad de inserciones, empiezas a quedarte sin números. Un proceso por lotes de baja prioridad podría volver a calcular el árbol para liberar números para inserciones nuevas.

La eliminación también se puede archivar, con la manipulación de números. De hecho, un nodo sin hijos es fácil. No hay recomputación integrada Se vuelve más complicado si es un niño, pero creo que debería ser factible.

+0

+1 Joe Celko tiene algunas publicaciones excelentes en esto en alguna parte Creo que su libro "SQL para smarties de Joe Celko" también tiene una sección. Sin duda vale la pena una búsqueda en Google. –

Cuestiones relacionadas