Wann würde ich XML anstelle von SQL verwenden? [geschlossen]

102

Ich arbeite seit einigen Jahren an datenbankgesteuerten Webanwendungen und habe kürzlich ein Projekt mit einem XML-fähigen CMS übernommen. Dies hat mich dazu gebracht, über die Verwendung von XML / XSLT im Allgemeinen nachzudenken und darüber, in welchen Situationen dies nützlicher wäre als der Ansatz, den ich immer verwendet habe, bei dem alle meine Daten in einer (meiner) SQL-Datenbank gespeichert und dann verwendet werden PHP / Python / etc. nach Bedarf im Web damit zu arbeiten.

Es gibt offensichtlich etwas, das ich hier nicht "bekomme". Kann mir jemand Beispiele für Anwendungen geben, bei denen das Speichern der Daten in XML-Dateien anstelle einer Datenbank vorzuziehen wäre?

Patrick Lewis
quelle
4
Ich denke, die Frage ist genauer XML im Vergleich zu einem RDBMS, nicht im Vergleich zu SQL.
JAL
4
Ich denke, die Frage ist genauer FILE vs. RDBMS, nicht XML vs SQL.
Pfeds
Wenn Sie Zeit haben, ist Michael Stonebrakers "What Goes Around Comes Around" , der jüngste Gewinner des Turing-Preises, ein ausgezeichnetes Papier über diese Geschichte von Datenbanken, einschließlich der Art und Weise, wie XML-Datenbanken vergangene Fehler wiederholten.
Jeffrey Bosboom

Antworten:

100

So zitieren Sie dieses Buch (Effektives XML: 50 spezifische Möglichkeiten zur Verbesserung Ihres XML):

„XML ist keine Datenbank. Es war nie als Datenbank gedacht. Es wird niemals eine Datenbank sein. Relationale Datenbanken sind bewährte Technologien mit mehr als 20 Jahren Implementierungserfahrung. Sie sind feste, stabile und nützliche Produkte. Sie gehen nicht weg. XML ist eine sehr nützliche Technologie zum Verschieben von Daten zwischen verschiedenen Datenbanken oder zwischen Datenbanken und anderen Programmen. Es ist jedoch selbst keine Datenbank. Benutze es nicht wie eins. “

Ich denke, das fasst es zusammen, wenn auch ein wenig unverblümt. XML ist ein Datenaustauschformat. Man kann XML-Parsing-Bibliotheken haben, die ein DOM mit XPath-Ausdrücken abfragen können, aber das ist nicht dasselbe wie ein DBMS. Sie können ein DBMS mit einer DOM / XPath-Schnittstelle erstellen. Um jedoch ACID-Eigenschaften zu erhalten oder auf große Datenmengen zu skalieren, müssen Sie eine DBMS-Engine und ein Datenformat mit Indizes, Protokollierung und anderen Artefakten eines DBMS implementieren - was (per Definition) der Fall ist es ist etwas anderes als XML.

ConcernedOfTunbridgeWells
quelle
1
Mir ist klar, dass diese Antwort im Jahr 2008 geschrieben wurde, aber mit dem Aufkommen einer Reihe von dateibasierten Datenbanksystemen frage ich mich, ob sie in einer Reihe von Situationen sinnvoller sind als herkömmliche RDBMS. SQL wurde in dunklen Zeiten entwickelt, in denen Speicherplatz teuer war, und ist in der Softwareindustrie zu einer Denkweise geworden. Das heißt nicht, dass es in Bezug auf moderne Methoden richtig ist.
Pfeds
Das macht XML immer noch nicht zu einer Datenbank, sondern nur zu einem Serialisierungsformat für etwas, das Sie in einem BLOB speichern. Dies mag für Sie nützlich sein, macht XML jedoch nicht zu einem Ersatz für eine voll funktionsfähige Abfragefunktion.
ConcernedOfTunbridgeWells
2
Die effizientere Verwaltung des Speicherplatzes ist nicht der einzige Vorteil relationaler Datenbanken. Die meisten relationalen Datenbanken arbeiten mit festen Feld- und Datensatzlängen, sodass sie in konstanter Zeit auf jede Anfrage reagieren können, während XML-, Yaml-, JSon- und andere textbasierte Datenspeicher grundsätzlich textbasiert sind Abfragen werden durch Textanalyse durchgeführt, was einen enormen Overhead in der Prozessorzeit bedeutet und in unvorhersehbarer Zeit ausgeführt werden kann. Dies konnte nur mit einem kostspieligen (in Bezug auf die CPU-Zeit) Vorpufferung mit großem Speicherbedarf umgangen werden.
mg30rg
Wenn ich ein SQL SP schreibe, um die Daten abzurufen und HTML anstelle der XSLT-Datei anzuzeigen, ist es schneller oder ungefähr gleich?
SearchForKnowledge
Heutzutage können Sie XQuery für XML-Datenbanken verwenden.
Don Dilanga
23

Verwenden Sie XML, um Dateien zu erstellen, die an andere Anwendungen gesendet werden müssen. XML eignet sich eher als Datenaustauschformat als als Datenspeicherformat.

Der folgende Link ist bei der Verwendung von XML nicht schlecht zu beschreiben: Warum sollte ich XML verwenden?

Veynom
quelle
Link Update vom 06.09.2012: xml.silmaril.ie/index.html
Wip
14

SQL sind gute Tabellendaten - Daten, die leicht in Zeilen und Spalten passen. XML eignet sich für hierarchische Daten - Daten mit mehreren Ebenen unterschiedlicher Größe.

SQL ist gut für die Speicherung und Suche. XML eignet sich gut zum Übertragen und Formatieren.

James Curran
quelle
10

1) Wenn Sie Ihre Daten mit anderen austauschen müssen. XML ist die " Verkehrssprache " des Webs - im Gegensatz zu einer Datenbankdatei kann es fast jeder lesen und interpretieren.

2) Wenn Ihr Datenvolumen klein ist und Sie keine komplexen Abfragen durchführen müssen. XML-Dateien eignen sich zum Speichern von Konfigurations- oder Dokumentvorlagen.

3) Wenn nicht viele Autoren versuchen, auf dieselben Daten zuzugreifen. Bei SQL-Datenbanken handelt es sich um Parallelitätsmechanismen, die für Sie hinter den Kulissen funktionieren. SQL-Datenbanken können Indizes zum schnellen Abrufen von Informationen zu großen Datenmengen unterstützen ...

Dave Markle
quelle
5

Dinge, für die ich XML verwende:

  • Objekthierarchie beibehalten.
  • Verschieben von Daten von einem Prozess oder einer Maschine zu einem anderen.
  • Daten, die sich, wenn überhaupt, selten ändern; Konfigurationseinstellungen und dergleichen.
  • Wenn sich die Eingabe in XSLT ändert: Wenn eines meiner Programme HTML ausgibt, wird im Allgemeinen XSLT verwendet, sodass die Quelldaten in einigen Fällen als XML dargestellt werden
  • Textmarkup. (Vergessen wir das nicht!)

Es gibt nicht viele Überschneidungen zwischen diesen Anwendungsfällen und den Anwendungsfällen für eine Datenbank. Einige, aber nicht viel.

Ironischerweise verwende ich XML derzeit am intensivsten in einer Desktop-App, die ein In-Memory-ADO-DataSet erstellt und die WriteXml- und ReadXml-Methoden des DataSet verwendet, um es beizubehalten und abzurufen. Ich verwende ADO, weil es viel einfacher ist, ein durch Metainformation definiertes Datenmodell mit ADO dynamisch zu erstellen, als mein eigenes Objektmodell für die Aufgabe zu implementieren.

Also hier ist ein Fall , dass aussieht wie ich bin mit XML als Datenbank. Aber ich bin es wirklich nicht. Ich verwende ein Objektmodell, das zufällig viele datenbankähnliche Funktionen implementiert, und ich verwende XML als Persistenzformat.

Robert Rossney
quelle
2

Ich glaube, es gibt einige kommerzielle Anwendungen, die XML als Speichermedium stark nutzen. Ich habe es für eine Projektplanungsanwendung gemacht, bei der der Benutzer jedes Projekt in einer eigenen Datei speichert. Die App lebt auf einem USB-Stick und muss nicht installiert werden. Alle Daten werden aus dem XML abgerufen und im Speicher bearbeitet, sodass getRecord (id) schnell verrückt ist.

Meine Antwort wäre also ... Wenn die Daten klein genug sind, um im Speicher gespeichert zu werden, ist eine Datenbank überlastet.

baash05
quelle
1

Wann immer Sie nicht den Luxus haben, eine Datenbank zu haben (denken Sie an Einzelbenutzeranwendungen) oder ein sehr leichtes Speicherformat benötigen.

Auch wie im vorigen Poster erwähnt, ein Austauschformat.

billb
quelle
1

Sowohl XML als auch RDMS können als Datenspeicher verwendet werden, aber jede Implementierung hat ihre eigenen Vor- und Nachteile.

Die Verwendung von XML zum Speichern von Daten für eine Webanwendung ist normalerweise kein großes Problem, bis Sie mit großen Datenmengen arbeiten oder entscheiden, dass Sie andere Informationen aus Ihren Daten ermitteln möchten (Beispiel: Data Mining). Mit anderen Worten, das Speichern großer Mengen von XML-Dateien für eine Datenquelle ist nicht sehr skalierbar, erleichtert jedoch das Verschieben der Daten. XML kann auch zum Serialisieren komplexer Objekte in einem nicht relationalen Format verwendet werden, wodurch die Notwendigkeit eines ORM entfällt, wenn Sie Ihre Objekte direkt aus dem XML serialisieren / deserialisieren können

RDMS (Datenbanken) sind normalerweise skalierbarer, bieten eine bessere Unterstützung für Parallelität und sind bei der Arbeit mit großen Datenmengen viel schneller. Das relationale Modell erleichtert später die Datenerfassung. Datenbanken leiden unter der Nichtübereinstimmung der objektrelationalen Impedanz ( http://en.wikipedia.org/wiki/Object-Relational_impedance_mismatch ), bei der Sie möglicherweise hässlichen Code schreiben oder komplexe ORMs verwenden müssen.

IAmCodeMonkey
quelle
1

Ich würde gehen, wenn ich MySQL-Datenbanken auf meinem Host eingeschränkt hätte, dann würde ich die Möglichkeit sehen, XML als Datenspeicher zu verwenden.

Milot
quelle
1

Hier ist ein Beispiel für die Verwendung von XML mit SQL: Authentifizierte Benutzer lesen und schreiben Daten in verschiedene Datenbanken, von denen nicht alle dasselbe DBMS sind. Benutzer für Unternehmen A verwenden Daten aus einer lokalen SQL Server-Datenbank. Benutzer für Unternehmen B verwenden Daten aus einer entfernten Oracle-Datenbank. Und so weiter. Ein Dutzend verschiedene Datenbanken mit jeweils leicht unterschiedlichen Schemata für dieselben Basisdaten.

Der Website-Entwickler kann keine gespeicherten Prozeduren in den entfernten Datenbanken erstellen. SQL muss direkt von der Web-App an die Datenbank gesendet werden. Da jede Datenbank eine geringfügig andere SQL-Syntax und ein etwas anderes SQL-Schema hat, muss für jede der 12 Datenbanken für dieselbe Operation (SELECT, INSERT usw.) ein anderes SQL verwendet werden.

Eine der Möglichkeiten zum Einbetten der SQL-Anweisungen in die Webanwendung besteht darin, sie in XML-Dateien zu platzieren. Jede XML-Datei enthält die SQL-Anweisungen für eine der zwölf Datenbanken. Der Code bestimmt, auf welche Datenbank für den angemeldeten Benutzer zugegriffen wird, und ruft das entsprechende SQL aus der angegebenen XML-Datei ab.

Genau wie bei gespeicherten Prozeduren kann die SQL in der XML-Datei aktualisiert werden, ohne die Anwendung anzuhalten oder neu zu kompilieren.

DOK
quelle
0

Einige Anwendungen verwenden XML-Dateien zum Speichern der Konfiguration. Ich bevorzuge SQLite, um dies zu tun.

CMS
quelle
0

Ich würde niemals XML verwenden, um meine Daten zu speichern.

Wir verwenden XSLT-Transformationen als Datenabstraktionsschicht in unserer SOA-App. Alle Objekte senden sich gegenseitig Daten in XSLT, sodass sie nur eine Sprache verstehen müssen. Mit Ausnahme des Datenbank-Connectors, der die Daten in SQL umwandeln muss, um sie an die Datenbank zu senden.

Auf diese Weise wird die SQL-Zeichenfolgengenerierung in Ihrer App nicht auf zig Objekte verteilt. Erleichtert die Wartung erheblich.

Treb
quelle
"Alle Objekte senden sich gegenseitig Daten in XSLT", im Ernst?
Goran
Alle, die über den Servicebus kommunizieren.
Treb
XSLT ist die Sprache zum Transformieren des XML, um keine Informationen zu übertragen. Ich kann mir vorstellen, dass Sie XSLT zum Senden von Daten verwenden könnten, da es sich um eine Teilmenge von XML handelt. Aber warum sollten Sie das möchten?
Goran
Ja, du hast recht - das muss ich umformulieren.
Treb