Quando dovrei usare XML invece di SQL? [chiuso]


102

Lavoro su applicazioni web basate su database da alcuni anni e recentemente ho intrapreso un progetto che coinvolge un CMS compatibile con XML. Questo mi ha portato a pensare all'uso di XML / XSLT in generale e in quali situazioni sarebbe stato più utile dell'approccio che ho sempre usato, che consiste nell'archiviare tutti i miei dati in un (mio) database SQL e quindi utilizzare PHP / Python / ecc. per lavorarci sul Web secondo necessità.

Ovviamente c'è qualcosa che non sto "ottenendo" qui .. qualcuno potrebbe darmi esempi di applicazioni in cui sarebbe preferibile archiviare i dati in file XML invece che in un database?


4
Penso che la domanda sia più accuratamente XML rispetto a un RDBMS, non rispetto a SQL.
JAL


4
Penso che la domanda sia più accuratamente FILE rispetto a un RDBMS, non XML contro SQL.
pfeds

Se avete tempo, "What Goes Around Comes Around", vincitore del recente Turing Award Michael Stonebraker, è un eccellente documento su questa storia di database, compreso il modo in cui i database XML hanno ripetuto gli errori del passato.
Jeffrey Bosboom

Risposte:


100

Per citare questo libro (XML efficace: 50 modi specifici per migliorare il tuo XML):

“XML non è un database. Non è mai stato concepito per essere un database. Non sarà mai un database. I database relazionali sono una tecnologia collaudata con oltre 20 anni di esperienza nell'implementazione. Sono prodotti solidi, stabili, utili. Non stanno andando via. XML è una tecnologia molto utile per spostare i dati tra database diversi o tra database e altri programmi. Tuttavia, non è esso stesso un database. Non usarlo come tale. "

Penso che questo lo riassuma, anche se un po 'bruscamente. XML è un formato di scambio di dati. Si possono avere librerie di analisi XML che possono interrogare un DOM con espressioni XPath ma non è la stessa cosa di un DBMS. È possibile creare un DBMS con un'interfaccia DOM / XPath ma per ottenere proprietà ACID o scalare a set di dati di grandi dimensioni è necessario implementare un motore DBMS e un formato dati con indici, registrazione e altri artefatti di un DBMS, che (per definizione) rende è qualcosa di diverso da XML.


1
Mi rendo conto che questa risposta è stata scritta nel 2008, ma con l'avvento di un certo numero di sistemi di database basati su file mi ritrovo a chiedermi se abbiano più senso dell'RDBMS convenzionale in una serie di situazioni. SQL è stato progettato in tempi bui, quando lo spazio su disco era costoso ed è diventato un modo di pensare nel settore del software. Ciò non significa che sia giusto in termini di metodi moderni.
pfeds

Ciò ancora non rende XML un database, solo un formato di serializzazione per qualcosa che stai memorizzando in un BLOB. Questo può esserti utile ma non rende XML un sostituto per una funzionalità di query completa.
ConcernedOfTunbridgeWells

2
La gestione più efficiente dello spazio su disco non è l'unico vantaggio dei database relazionali. La maggior parte dei database relazionali lavora con lunghezze di campo e record fisse, il che li rende in grado di rispondere in un tempo costante a qualsiasi richiesta mentre gli archivi dati XML, Yaml, JSon e altri basati su testo sono fondamentalmente basati su testo, quindi tutti le query vengono eseguite tramite l'analisi del testo che ha un enorme sovraccarico nel tempo del processore e può essere eseguita in un periodo di tempo imprevedibile. Questo può essere risolto solo con un pre-buffer costoso (in termini di tempo di CPU) con enormi requisiti di memoria.
mg30rg

Se scrivo un SQL SP per recuperare i dati e utilizzo HTML per visualizzare invece del file XSLT, è più veloce o più o meno lo stesso?
SearchForKnowledge

1
oggi puoi usare XQuery per i database XML.
Don Dilanga

23

Usa XML per creare file che devono essere inviati ad altre applicazioni. XML è più adatto come formato di scambio dati che come formato di archiviazione dati.

Il seguente collegamento non è male da descrivere quando si utilizza XML: Perché dovrei usare XML?


Aggiornamento collegamento come del 2012/09/06: xml.silmaril.ie/index.html
wip

15

SQL è un buon dato tabulare: dati che si adattano facilmente a righe e colonne. XML è utile per i dati gerarchici - dati che hanno diversi livelli di dimensioni diverse.

SQL è utile per l'archiviazione e la ricerca. XML è utile per la trasmissione e la formattazione.


10

1) Quando devi scambiare i tuoi dati con altri. XML è la " lingua franca " del Web: quasi tutti possono leggerlo e interpretarlo, a differenza di un file di database.

2) Quando il volume dei dati è ridotto e non è necessario eseguire query complesse su di esso. I file XML sono utili per cose come la memorizzazione di configurazioni o modelli di documenti.

3) Quando non ci sono molti scrittori che tentano di accedere agli stessi dati. I database SQL hanno coinvolto meccanismi di concorrenza che funzionano dietro le quinte per te. I database SQL possono supportare indici per il recupero di informazioni su grandi set di dati rapidamente ...


5

Cose per cui uso XML:

  • Persistenza di una gerarchia di oggetti.
  • Spostamento dei dati da un processo o macchina a un altro.
  • Dati che cambiano raramente, se non del tutto; impostazioni di configurazione e simili.
  • Quando l'input a XSLT si trasforma: in generale, se uno dei miei programmi emette HTML, sta usando XSLT per farlo, e quindi i dati di origine verranno rappresentati come XML in alcuni
  • Markup di testo. (Non dimentichiamolo!)

Non c'è molta sovrapposizione tra questi casi d'uso e i casi d'uso per un database. Alcuni, ma non molto.

Ironia della sorte, dove sto facendo il mio uso più intenso di XML al momento è in un'app desktop che crea un ADO DataSet in memoria e utilizza i metodi WriteXml e ReadXml di DataSet per persistere e recuperarlo. Sto usando ADO perché è molto più facile costruire dinamicamente un modello di dati definito dalla metainformazione usando ADO piuttosto che implementare il mio modello a oggetti per l'attività.

Quindi ecco un caso che sembra che stia usando XML come database. Ma davvero non lo sono. Sto usando un modello a oggetti che implementa molte funzionalità simili a database e sto usando XML come formato di persistenza.


3

Credo che ci siano parecchie applicazioni commerciali che fanno un uso massiccio di XML come supporto di memorizzazione. L'ho fatto per un'applicazione di pianificazione del progetto, in cui l'utente memorizza ogni progetto nel proprio file. L'app risiede su una chiavetta USB e non richiede installazione. Tutti i dati vengono estratti dall'XML e lavorati in memoria, quindi getRecord (id) è velocissimo.

Quindi la mia risposta sarebbe .. quando i dati sono abbastanza piccoli da essere conservati in memoria, un database è finito.



1

Ogni volta che non hai il lusso di avere un database (pensa alle applicazioni per utente singolo) o hai bisogno di un formato di archiviazione molto leggero.

Inoltre, come menzionato nel poster precedente, un formato di interscambio.


1

Sia XML che RDMS possono essere usati come datastore, ma ogni implementazione ha i suoi vantaggi e svantaggi.

L'utilizzo di XML per archiviare i dati per un'applicazione Web di solito non è un grosso problema finché non si inizia a gestire grandi quantità di dati o si decide di voler scoprire altre informazioni dai propri dati (esempio: data mining). In altre parole, l'archiviazione di grandi quantità di file XML per un'origine dati non è molto scalabile, ma semplifica lo spostamento dei dati. XML può essere utilizzato anche per serializzare oggetti complessi in un formato non relazionale, il che potrebbe eliminare la necessità di un ORM se è possibile serializzare / deserializzare i propri oggetti direttamente dall'XML

Gli RDMS (database) sono generalmente più scalabili, offrono un maggiore supporto per la concorrenza e sono molto più veloci quando si lavora con grandi quantità di dati. Il modello relazionale semplifica l'estrazione dei dati in un secondo momento. I database soffrono della mancata corrispondenza dell'impedenza relazionale oggetto ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ) che potrebbe richiedere la scrittura di codice brutto o l'utilizzo di ORM complessi.


1

Vorrei andare se avessi database mysql limitati sul mio host, quindi vedrei l'opportunità di utilizzare XML come datastore.


1

Di seguito è riportato un esempio di utilizzo di XML con SQL: Gli utenti autenticati leggono e scrivono dati su vari database, non tutti sono lo stesso DBMS. Gli utenti della società A utilizzano i dati da un database SQL Server locale. Gli utenti della società B utilizzano i dati da un database Oracle remoto. E così via. Una dozzina di database diversi, ciascuno con schemi leggermente diversi per gli stessi dati di base.

Lo sviluppatore del sito web non ha la possibilità di creare stored procedure sui database remoti. SQL deve essere inviato direttamente dall'app Web al database. Poiché ogni database ha una sintassi e uno schema SQL leggermente diversi, è necessario utilizzare un SQL diverso per ciascuno dei 12 database per la stessa operazione (SELECT, INSERT, ecc.).

Una delle scelte per incorporare le istruzioni SQL nell'app Web è inserirle in file XML. Ogni file XML contiene il set di istruzioni SQL per uno delle dozzine di database. Il codice determina a quale database si accede per l'utente connesso e recupera l'SQL appropriato dal file XML specificato.

Proprio come con le procedure memorizzate, l'SQL nel file XML può essere aggiornato senza arrestare o ricompilare l'applicazione.


0

Alcune applicazioni utilizzano file XML per memorizzare la configurazione, preferisco usare SQLite per farlo.


0

Non lo farei mai alcun tipo di XML per memorizzare i miei dati.

Usiamo le trasformazioni XSLT come livello di astrazione dei dati nella nostra app SOA. Tutti gli oggetti si scambiano dati in XSLT, quindi c'è solo una lingua che devono capire. Ad eccezione del connettore database, che deve essere in grado di trasformare i dati in SQL, per inviarli al DB.

In questo modo non avrai la generazione di stringhe SQL distribuita su un trilione di oggetti nella tua app. Rende la manutenzione molto più semplice.


"Tutti gli oggetti si scambiano dati in XSLT," Sul serio?
Goran

Tutti quelli che comunicano tramite il servizio bus.
Treb

XSLT è il linguaggio per trasformare l'XML in modo che non contenga informazioni. Immagino che potresti usare XSLT per inviare dati in quanto è un sottoinsieme di XML, ma perché dovresti volerlo?
Goran

Sì, hai ragione - ho bisogno di riformularlo.
Treb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.