¿Cuándo usaría XML en lugar de SQL? [cerrado]

102

He estado trabajando en aplicaciones web basadas en bases de datos durante algunos años y recientemente asumí un proyecto que involucra un CMS que es compatible con XML. Esto me ha llevado a pensar en 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 (Mi) SQL y luego usar PHP / Python / etc. para trabajar con él en la web según sea necesario.

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

Patrick Lewis
fuente
4
Creo que la pregunta es más exactamente XML frente a RDBMS, no frente a SQL.
JAL
4
Creo que la pregunta es con más precisión ARCHIVO frente a RDBMS, no XML frente a SQL.
pfeds
Si tiene tiempo, "What Goes Around Comes Around" del reciente ganador del premio Turing, Michael Stonebraker, es un excelente artículo sobre esta historia de las bases de datos, que incluye cómo las bases de datos XML repiten errores del pasado.
Jeffrey Bosboom

Respuestas:

100

Para citar este libro (XML efectivo: 50 formas específicas de mejorar su XML):

“XML no es una base de datos. Nunca tuvo la intención de ser una base de datos. Nunca 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 y útiles. No se van a ir. 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í misma una base de datos. No lo uses como uno ".

Creo que esto lo resume, aunque un poco sin rodeos. XML es un formato de intercambio de datos. Se pueden 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, que (por definición) hace es algo diferente a XML.

PreocupadoDeTunbridgeWells
fuente
1
Me doy cuenta de que esta respuesta fue escrita en 2008, pero con la llegada de varios sistemas de bases de datos basados ​​en archivos, me pregunto si tienen más sentido que los RDBMS convencionales en varias situaciones. SQL fue diseñado en la edad oscura 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
Eso todavía no convierte a XML en una base de datos, solo en un formato de serialización para algo que está almacenando en un BLOB. Esto puede resultarle útil, pero no convierte a XML en un sustituto de una función de consulta con todas las funciones.
ConcernedOfTunbridgeWells
2
La gestión más eficiente del espacio en disco no es la única ventaja de las bases de datos relacionales. La mayoría de las bases de datos relacionales funcionan con campos fijos y longitudes de registro, lo que las hace capaces de responder en un tiempo constante a cualquier solicitud, mientras que XML, Yaml, JSon y otros almacenamientos de datos basados ​​en texto se basan básicamente en texto, por lo que todos Las consultas se realizan a través del análisis de texto que tiene una gran sobrecarga en el tiempo de procesador y se puede realizar en una cantidad de tiempo impredecible. Esto solo podría solucionarse con un almacenamiento previo costoso (en términos de tiempo de CPU) con enormes requisitos de memoria.
mg30rg
Si escribo un SP de SQL para recuperar los datos y uso HTML para mostrar en lugar del archivo XSLT, ¿es más rápido o casi lo mismo?
SearchForKnowledge
hoy en día puede utilizar XQuery para bases de datos XML.
Don Dilanga
23

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 se usa XML: ¿Por qué debería usar XML?

Veynom
fuente
Actualización de enlace como de 06/09/2012: xml.silmaril.ie/index.html
WIP
14

SQL son buenos datos tabulares: datos que encajan fácilmente en filas y columnas. XML es bueno para datos jerárquicos: datos que tienen varios niveles de diferentes tamaños.

SQL es bueno para el almacenamiento y la búsqueda. XML es bueno para transmitir y formatear.

James Curran
fuente
10

1) Cuando tenga que intercambiar sus datos con otros. XML es la " lengua franca " de la Web: casi todo el mundo puede 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 realizar consultas complejas contra él. Los archivos XML son buenos para cosas como almacenar configuraciones o plantillas de documentos.

3) Cuando no tiene muchos escritores intentando acceder a los mismos datos. Las bases de datos SQL han involucrado mecanismos de concurrencia que trabajan detrás de escena para usted. Las bases de datos SQL pueden admitir índices para la recuperación de información sobre grandes conjuntos de datos rápidamente ...

Dave Markle
fuente
5

Cosas para las que uso XML:

  • Persistencia de una jerarquía de objetos.
  • Mover datos de un proceso o máquina a otro.
  • Datos que rara vez cambian, si es que cambian; ajustes de configuración y similares.
  • Como la entrada a XSLT se transforma: en términos generales, si uno de mis programas emite HTML, está usando XSLT para hacerlo, por lo que los datos de origen se representarán como XML en algunos
  • Marcado de texto. (¡No olvidemos eso!)

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 mi mayor uso de XML en este momento es en una aplicación de escritorio que crea un ADO DataSet en memoria y usa los métodos WriteXml y ReadXml de DataSet para persistir y recuperarlo. Estoy usando ADO porque es mucho más fácil construir dinámicamente un modelo de datos definido por metainformación usando ADO de lo que sería implementar mi propio modelo de objetos para la tarea.

Así que aquí hay un caso que parece que estoy usando XML como base de datos. Pero realmente no lo soy. Estoy usando un modelo de objetos que implementa muchas funciones similares a las de una base de datos, y estoy usando XML como formato de persistencia.

Robert Rossney
fuente
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 increíblemente rápido.

Entonces mi respuesta sería ... cuando los datos son lo suficientemente pequeños como para ser retenidos en la memoria, una base de datos se termina.

baash05
fuente
1

Siempre que no tenga el lujo de tener una base de datos (piense en aplicaciones de un solo usuario) o necesite un formato de almacenamiento muy ligero.

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

billb
fuente
1

Tanto XML como RDMS se pueden utilizar como almacenes de datos, pero cada implementación tiene sus propias ventajas e inconvenientes.

El uso de XML para almacenar datos para una aplicación web no suele ser un gran problema hasta que comienza a trabajar con grandes cantidades de datos o decide que desea descubrir otra información de sus datos (ejemplo: minería de datos). En otras palabras, almacenar grandes cantidades de archivos XML para una fuente de datos no es muy escalable, pero facilita el movimiento de los datos. XML también se puede utilizar para serializar objetos complejos en un formato no relacional, lo que podría eliminar la necesidad de un ORM si puede serializar / deserializar sus objetos directamente desde XML

Los RDMS (bases de datos) suelen ser más escalables, ofrecen mayor compatibilidad con la concurrencia y son mucho más rápidos cuando se trabaja con grandes cantidades de datos. El modelo relacional facilita la extracción de datos más adelante. Las bases de datos sufren de la falta de coincidencia de impedancia relacional de objetos ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ) que puede requerir que escriba un código desagradable o use ORM complejos.

IAmCodeMonkey
fuente
1

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

milot
fuente
1

Aquí hay un ejemplo de uso de XML con SQL: Los usuarios autenticados leen y escriben datos en varias bases de datos, no todas son el mismo DBMS. Los usuarios de la empresa A utilizan datos de una base de datos local de SQL Server. Los usuarios de la empresa B utilizan datos de una base de datos Oracle remota. 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. Dado que cada base de datos tiene una sintaxis y un esquema SQL ligeramente diferentes, es necesario utilizar un SQL diferente para cada una de las 12 bases de datos para la misma operación (SELECT, INSERT, etc.).

Una de las opciones para incrustar las declaraciones SQL en la aplicación web es colocarlas en archivos XML. Cada archivo XML contiene el conjunto de declaraciones SQL para una de las doce bases de datos. El código determina a qué base de datos accede 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 volver a compilar la aplicación.

DOK
fuente
0

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

CMS
fuente
0

Yo nunca utilizar ningún 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 deben comprender. A excepción del conector de la base de datos, que necesita poder transformar los datos en SQL, para enviarlos a la base de datos.

De esta manera, no tiene la generación de cadenas SQL distribuida entre un millón de objetos en su aplicación. Facilita mucho el mantenimiento.

Treb
fuente
"Todos los objetos se envían datos entre sí en XSLT", ¿en serio?
Goran
Todos los que se comunican por el bus de servicio.
Treb
XSLT es el lenguaje para transformar XML para que no lleve información. Me imagino que podría usar XSLT para enviar datos, ya que es un subconjunto de XML, pero ¿por qué querría hacerlo?
Goran
Sí, tienes razón, necesito reformular eso.
Treb