2011-08-10 18 views
10

Estoy recibiendo datos XML de un servicio. Los datos de prueba que recibo tienen unos 300 nodos XML, claramente demasiados para crear filas individuales en una base de datos MySQL.La mejor manera de almacenar datos XML en una base de datos MySQL, con algunos requisitos específicos

El problema es que idealmente necesitamos almacenar todos los datos, y que probablemente tendrá que hacer referencia a los datos de nuevo en algún momento en el futuro - no podemos procesar a través de él una vez y eliminar la cadena XML .

¿Cuál es la mejor manera de almacenar esta información en una base de datos MySQL?

He pronosticado que a la tasa prevista dentro de unos meses, si tuviéramos que almacenar los datos XML sin procesar en el formato TEXT, la base de datos podría crecer a alrededor de 500MB. A la larga esto se siente poco práctico.

Respuesta

14

Puede crear una columna blob (es decir, mediumtext columna). En lugar de insertar XML puramente como cadenas en la BD, puede comprimir el XML y luego almacenarlo en MySQL.

Cuando lee de MySQL, lo descomprime de nuevo. Como XML es texto, obtendrá tasas de compresión muy altas (cerca del 80% de compresión). Siendo el proceso de pensamiento, el disco IO toma mucho más tiempo que la compresión/descompresión, que está predominantemente unida al procesador.

El inconveniente es que ya no será capaz de consultar o hacer búsqueda de texto completo utilizando SQL ....

+0

Gracias @Srikar, creo que esta solución coincide exactamente con mis requisitos. Solo necesito almacenar el documento xml en DB para referencia futura, no se realizarán consultas en el documento XML almacenado. Mi única preocupación fue sobre el tiempo, el requisito de almacenamiento para almacenar archivos xml puede aumentar dramáticamente. Para eso, comprimiré los archivos antes de almacenarlos en DB. – Anuruddha

2

La mejor manera es no almacenar XML en la base de datos, pero tengo un historial con ese problema en particular.

Solo almacénelo como TEXTO. 500 MB no son nada para MySql, especialmente con los tipos de datos TEXT, ya que no están almacenados en el búfer de fila.

4

Intente utilizar LOAD XML comando. Esta declaración está disponible en MySQL 5.5.

3

Mucho depende de lo que quieras hacer con los datos: si quieres buscar cosas dentro del XML, entonces decomposing it into a tree dará un mejor rendimiento de consulta.

500Mb no es una gran cantidad de datos; todo se trata de cómo hacer referencia a él y buscarlo. Si solo es para archivar o nunca necesita buscar dentro del XML, comprimirlo (por ejemplo) la codificación base64 reducirá esto a menos de 80Mb

Cuestiones relacionadas