2008-10-14 13 views
89

He estado trabajando en aplicaciones web basadas en bases de datos desde hace algunos años y recientemente asumí un proyecto que implica un CMS que es compatible con XML. Esto me ha llevado a pensar sobre el uso de XML/XSLT en general y en qué situaciones sería más útil que el enfoque que siempre he usado, que es almacenar todos mis datos en una base de datos (My) SQL y luego usar PHP/Python/etc. para trabajar con él en la web según sea necesario.¿Cuándo usaría XML en lugar de SQL?

Obviamente, hay algo que no estoy "obteniendo" aquí ... ¿alguien podría darme ejemplos de aplicaciones donde sería preferible almacenar los datos en archivos XML en lugar de en una base de datos?

+1

Creo que la pregunta es más precisa XML frente a un RDBMS, no frente a SQL. – JAL

+0

http://en.wikipedia.org/wiki/Xml_database –

+4

Creo que la pregunta es el archivo más exactamente frente a un RDBMS, no XML vs SQL. – pfeds

Respuesta

90

Para citar This Book (XML efectiva: 50 maneras específicas de mejorar su XML):

“XML no es una base de datos . Nunca fue destinado a ser una base de datos. Nunca es va a ser una base de datos. Las bases de datos relacionales son tecnología probada con más de 20 años de experiencia en implementación . Son productos sólidos, estables, útiles. Ellos no van a de distancia. XML es una tecnología muy útil para mover datos entre diferentes bases de datos o entre bases de datos y otros programas. Sin embargo, no es en sí una base de datos. No lo use como uno. "

Creo que esto lo resume, aunque un poco sin rodeos. XML es un formato de intercambio de datos. Uno puede tener bibliotecas de análisis XML que pueden consultar un DOM con expresiones XPath, pero eso no es lo mismo que un DBMS. Puede construir un DBMS con una interfaz DOM/XPath, pero para obtener propiedades ACID o escalar a grandes conjuntos de datos, necesita implementar un motor DBMS y un formato de datos con índices, registros y otros artefactos de un DBMS, lo que (por definición) hace es algo más que XML.

+0

Soy consciente de que esta respuesta fue escrito en 2008, pero con la llegada de una serie de sistemas de bases de datos basados ​​en archivos Me pregunto si tienen más sentido que los RDBMS convencionales en una serie de situaciones. SQL fue diseñado en las edades oscuras cuando el espacio en disco era costoso, y se ha convertido en una forma de pensar dentro de la industria del software. Eso no significa que sea correcto en términos de métodos modernos. – pfeds

+0

Eso todavía no convierte XML en una base de datos, solo un formato de serialización para algo que está almacenando en un BLOB. Esto puede ser útil para usted, pero no hace que XML sea un sustituto de una función de consulta completa. – ConcernedOfTunbridgeWells

+2

La administración de espacio de disco más eficiente no es la única ventaja de las bases de datos relacionales.La mayoría de las bases de datos relacionales trabajan con longitudes fijas de campo y registro, lo que les permite responder en un tiempo constante a cualquier solicitud, mientras que XML, Yaml, JSon y otros almacenamientos de datos basados ​​en texto están básicamente basados ​​en texto, por lo que todos las consultas se realizan a través de un análisis de texto que tiene una gran sobrecarga en el tiempo del procesador y puede realizarse en un período de tiempo impredecible. Esto solo podría solucionarse con un pre-buffer económico (en términos de tiempo de CPU) con grandes requisitos de memoria. – mg30rg

20

Utilice XML para crear archivos que deben enviarse a otras aplicaciones. XML es más adecuado como formato de intercambio de datos que como formato de almacenamiento de datos.

El siguiente enlace no es malo para describir cuando el uso de XML: Why should I use XML ?

+0

Buena fan-out. actualización 1 – ConcernedOfTunbridgeWells

+0

Enlace a partir del 09/06/2012: http://xml.silmaril.ie/index.html – wil

1

Siempre que usted no tiene el lujo de tener una base de datos (piensan aplicaciones de usuario único) o necesita un formato de almacenamiento muy ligero.

También como el cartel anterior mencionado, un formato de intercambio.

10

1) Cuando tiene que intercambiar sus datos con otros. XML es el "lingua franca" de la Web; casi todos pueden leerlo e interpretarlo, a diferencia de un archivo de base de datos.

2) Cuando su volumen de datos es pequeño y no tiene que hacer consultas complejas en su contra. Los archivos XML son buenos para cosas como almacenar configuraciones o plantillas de documentos.

3) Cuando no hay muchos escritores tratando de acceder a los mismos datos. Las bases de datos SQL han involucrado mecanismos de concurrencia que están trabajando detrás de escena para usted. bases de datos SQL pueden apoyar índices para la recuperación de la información en grandes conjuntos de datos con rapidez ...

+0

Mod 1 para "lengua franca" –

13

SQL es una buena información tabular - datos que se ajusta fácilmente a las filas & columnas. XML es bueno para datos jerárquicos: datos que tienen varios niveles de diferentes tamaños.

SQL es bueno para el almacenamiento & buscando. XML es bueno para la transmisión de formato &.

1

Ambos XML y RDMS se pueden usar como almacenes de datos, pero cada implementación tiene sus propias ventajas y desventajas.

Usar XML para almacenar datos para una aplicación web generalmente no es un gran problema hasta que empiece a manejar grandes cantidades de datos o decida que quiere descubrir otra información de sus datos (ejemplo: extracción de datos). En otras palabras, el almacenamiento de grandes cantidades de archivos XML para una fuente de datos no es muy escalable, pero hace que sea más fácil mover los datos. XML también se puede utilizar para serializar objetos complejos en un formato no relacional, que podría eliminar la necesidad de un ORM si puede serializar/deserializar sus objetos directamente desde el XML

Los RDMS (bases de datos) suelen ser más escalables, ofrecen mayor compatibilidad de concurrencia y son mucho más rápidos cuando se trabaja con grandes cantidades de datos. El modelo relacional hace que sea más fácil extraer datos más adelante. Las bases de datos sufren la incompatibilidad de la impedancia relacional del objeto (http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch) que podría requerir que escriba un código feo o utilice ORM complejos.

0

Algunas aplicaciones usan archivos XML para almacenar la configuración, prefiero usar SQLite para hacerlo.

1

Iría si tengo bases de datos mysql limitadas en mi host, entonces vería la oportunidad de usar XML como almacén de datos.

0

I would never uso cualquier tipo de XML para almacenar mis datos.

Usamos transformaciones XSLT como una capa de abstracción de datos en nuestra aplicación SOA. Todos los objetos se envían datos entre sí en XSLT, por lo que solo hay un idioma que necesitan comprender. Excepto por el conector de la base de datos, que necesita poder transformar los datos en SQL, para enviarlo a la base de datos.

De esta manera no tiene la generación de cadenas de SQL distribuidas en un trillón de objetos en su aplicación. Hace el mantenimiento mucho más fácil.

+0

"Todos los objetos se envían datos entre sí en XSLT" ¿En serio? – Goran

+0

Todos aquellos que se comunican a través del bus de servicio. – Treb

+0

XSLT es el lenguaje para transformar el XML y no para transportar información. Me imagino que podrías usar XSLT para enviar datos, ya que es un subconjunto de XML, pero ¿por qué querrías? – Goran

1

Aquí hay un ejemplo del uso de XML con SQL: los usuarios autenticados leen y escriben datos en varias bases de datos, no todas ellas son el mismo DBMS. Los usuarios de la Compañía A usan datos de una base de datos local de SQL Server. Los usuarios de la empresa B usan datos de una base de datos remota de Oracle. Y así. Una docena de bases de datos diferentes, cada una con esquemas ligeramente diferentes para los mismos datos básicos.

El desarrollador del sitio web no tiene la capacidad de crear procedimientos almacenados en las bases de datos remotas. SQL debe enviarse directamente desde la aplicación web a la base de datos. Como cada base de datos tiene una sintaxis SQL y un esquema ligeramente diferentes, es necesario usar diferentes SQL para cada una de las 12 bases de datos para la misma operación (SELECT, INSERT, etc.).

Una de las opciones para incrustar las sentencias SQL en la aplicación web es colocarlas en archivos XML. Cada archivo XML contiene el conjunto de sentencias SQL para una de las doce bases de datos. El código determina a qué base de datos se accede para el usuario que ha iniciado sesión y recupera el SQL apropiado del archivo XML especificado.

Al igual que con los procedimientos almacenados, el SQL en el archivo XML se puede actualizar sin detener o recompilar la aplicación.

5

cosas que uso de XML para:

  • La persistencia de una jerarquía de objetos.
  • Mover datos de un proceso o máquina a otro.
  • Datos que cambian raramente, en todo caso; configuración de configuración y similares.
  • Como la entrada a XSLT se transforma: en términos generales, si uno de mis programas emite HTML, usa XSLT para hacerlo, y los datos de origen se representan como XML en algún
  • Marcación de texto. (¡No lo olvidemos!)

No hay mucha superposición entre esos casos de uso y los casos de uso de una base de datos. Algunos, pero no mucho.

Irónicamente, donde estoy haciendo un mayor uso de XML en este momento es en una aplicación de escritorio que construye un DataSet en memoria ADO y utiliza los métodos WriteXml y ReadXml del DataSet para conservarlo y recuperarlo. Estoy usando ADO porque es mucho más fácil construir dinámicamente un modelo de datos definido por metainformación utilizando ADO de lo que sería implementar mi propio modelo de objetos para la tarea.

Así que aquí hay un caso en el que parece como si estuviera usando XML como base de datos. Pero realmente no lo soy. Estoy usando un modelo de objetos que implementa muchas funcionalidades tipo base de datos, y estoy usando XML como formato de persistencia.

2

Creo que hay bastantes aplicaciones comerciales que hacen un uso intensivo de XML como medio de almacenamiento. Lo hice para una aplicación de planificación de proyectos, donde el usuario almacena cada proyecto en su propio archivo. La aplicación vive en una memoria USB y no requiere instalación. Todos los datos se extraen del XML y se trabajan en la memoria, por lo que getRecord (id) es muy rápido.

Así que mi respuesta sería .. cuando los datos son lo suficientemente pequeños que tendrá lugar en la memoria, una base de datos es más de matar.

Cuestiones relacionadas