2011-01-12 12 views
8

Estoy muy entusiasmado con el nuevo Mysql XMl Functions.¿Desempeño de las funciones de MySql Xml?

Ahora, finalmente, puedo incorporar algo así como documentos "orientados a objetos" en mi base de datos relacional de la vieja escuela.

Para un caso de uso de ejemplo, considere a un usuario que canta en su sitio web usando facebook connect. Puede buscar un objeto para el usuario usando la API gráfica y obtener buena información. Sin embargo, esta información puede variar enormemente. Algunos campos pueden o no estar configurados, algunos pueden agregarse a lo largo del tiempo y así sucesivamente.

Bueno, si estás interesado en campos muy especiales (por ejemplo, relaciones de amigos, género, películas ...), puedes proyectarlos en tu esquema de base de datos relacional.

Sin embargo, al usar las funciones XMl puede almacenar todo el objeto dentro de un campo y luego sus diferentes modelos pueden acceder a los datos usando la función ExtractValue. Puede almacenar todo de inmediato sin necesidad de preocuparse de lo que necesitará más adelante.

¿Pero cuál será el rendimiento?

Por ejemplo, tengo una tabla con 50 000 entradas que representan useres. que tienen un campo de enumeración que indica "male", "female "(o varios otros géneros para ser políticamente correcto).

El rendimiento de, por ejemplo, ir a buscar todos los varones será muy rápido.

  • Pero ¿qué pasa con algo así como WHERE ExtractValue(userdata, '/gender/') = 'male'?

  • Cómo variará el rendimiento si el objeto se hace más grande?

  • ¿Puedo maby alguna manera poner un índice en específi selecciones ed xpath?

  • ¿Cómo funcionan los tipos de campo junto con estas funciones/rendimiento. Varchar/blob?

  • ¿Necesito índices de texto completo?

En resumen mi pregunta:

functins Mysql XML ven muy bien. Y estoy seguro de que son geniales si solo quiere almacenar datos estructurados que busque y analice en su aplicación.

Pero, ¿cómo se enfrentarán en los procedimientos donde se realizan escaneos internos/clasificación/comparación/cálculos realizados en ellos?

¿Puede Mysql reemplazar bases de datos orientadas a documentos como CouchDB/Sesame?

¿Cuáles son las ventajas y desventajas de las funciones XML?

¿Cómo y por qué son mejores/peores que una aplicación dinámica que almacena varios datos como atributos?

Por ejemplo, una tabla de clave/valor con un xpath como clave y el valor como valor conectado a la entidad del documento.

¿Alguien hizo alguna otra experiencia con él o ha notado algo que se puede mencionar?

+0

Todavía estoy totalmente alucinado que estos existen en primer lugar. Cuando vi tu enlace, pensé que era una vieja broma de los inocentes :) –

+0

hecho reconfortante de que ni siquiera todos lo sabían;) –

+0

En realidad no soy tan bueno en mySQL más allá de lo que un desarrollador web necesita todos los días. Todavía estoy perplejo sobre cómo * I * llegó a ser el usuario # 6 en la etiqueta :) –

Respuesta

1

Tiendo a hacer comentarios similares a los de Pekka, pero creo que la razón por la que no podemos reírnos de esto es por su afirmación "Sin embargo, esta información puede variar mucho". Eso significa que no es realista planear analizarlo todo y proyectarlo en la base de datos.

No puedo responder a todas sus preguntas, pero puedo responder algunas de ellas.

Lo más notable es que no puedo hablar sobre el rendimiento en MySQL. Lo he visto en SQL Server, lo probé y encontré que SQL Server realiza en memoria extracciones XML muy lentamente, para mí parecía como si estuviera leyendo desde el disco, pero eso es un poco exagerado. Otros pueden disputar esto, pero eso es lo que encontré.

"¿Puede Mysql reemplazar bases de datos orientadas a documentos como CouchDB/Sesame?" Esta pregunta es un poco amplia, pero en su caso el uso de MySQL le permite mantener el cumplimiento de ACID para estos fragmentos de XML, suponiendo que esté utilizando InnoDB, que no puede decirse automáticamente de algunas de esas bases de datos orientadas a documentos.

"¿Cómo y por qué son mejores/peores que una aplicación dinámica que almacena varios datos como atributos?" Creo que esto es realmente una cuestión de estilo. Se le proporcionan fragmentos XML que (probablemente) están documentados y MySQL puede navegarlos. Si los mantienes como tal, guardas un paso. ¿Qué se ganaría al convertirlos a otra cosa?

Los documentos de MySQL sugieren que el archivo XML entrará en un campo clob. El rendimiento puede sufrir en documentos más grandes. Quizás entonces identifique los documentos secundarios que desea dividir regularmente y poner en una tabla secundaria.

En esta misma línea, si hay subdocumentos particulares que usted sabe que querrá saber, puede crear una tabla secundaria, "HasDocs", hacer un pequeño preprocesamiento y completarla con nombres de sub -docs con sus cuentas. Esto permitiría un análisis estadístico más rápido y también haría que sea más rápido encontrar documentos que tengan ciertos documentos secundarios.

Ojalá pudiera decir más, espero que esto ayude.

Cuestiones relacionadas