Hannes Meiler: XML-Daten archivieren

Guten Morgen!

Ich habe ein Online-Portal erstellt, bei dem jeder Kunde ein bestimmten Vorgang auslöst und eine XML-Datei für eine Schnittstelle (SAP) geschrieben wird.
Diese XML-Datei muss ich speichern, da es vorkommen kann, dass er Inhalte daraus editieren kann um den Vorgang erneut auszulösen.

Ist es nun sinnvoller pro Vorgang des Kunden die XML-Datei als solche in einem Verzeichnis zu archivieren oder die Daten mit einem PHP-XML-Parser in eine MySQL-Datenbank zu sichern und bei Bedarf wieder abzufragen?
Vielleicht gibt es hier auch noch eine andere Lösung?

Sicherlich spielt hier auch die Perfomance eine wichtige Rolle.

Danke für eure Eindrücke und Lösungsvorschläge.

Viele Grüße Hannes

  1. Das lässt sich nicht eindeutig beantworten.

    Hier eine Analogie

    Wenn ich mit OpenOffice eine bestehende Datei öffne, sollen dann alle Änderungen sofort ins Original geschrieben werden, oder soll ein Temp File erstellt werden, und nur im Fall der expliziten Sicherung das Original überschrieben werden?
    Die Antwort in diesem Fall ist klar.

    mfg Beat

    --
    Selber klauen ist schöner!
  2. Hi Hannes!

    Anstelle von Antworten gibt es leider erst mal Fragen:

    1. Wie speicherst du die XML Datei (mktemp)? Wie merkst du dir den Dateinamen für den weiteren Zugriff?
    2. Gültigkeit der XML Datei:
    • innerhalb einer Session oder dauerhaft?
    • für einen Kunden (1 xml / 1 Kunde) oder mehrere Kunden (1 xml / n Kunden)?
    1. Der Kunde kann die (automatisch?) generierte xml Datei editieren? Manuell oder "indirekt", z.B. KnotenXY durch "button press" auf deiner Oberfläche hinzufügen? Erfolgt die Speicherung dann automatisch oder ist eine weitere Useraktion Auslöser?

    Generell würde ich dir immer dazu raten, Daten in einer Datenbank abzulegen,  da diese gegenüber einer reinen Dateispeicherung viele Vorteile bietet:

    1. Zugriffssicherheit: Die Datenbank gewährleistet dir, dass du z.B. keine ungültigen Daten erhältst, die entstehen können, wenn mehrere Akteure auf eine Datenquelle lesend/schreibend zugreifen:
      Var1 = "Ich bin ein laufender Prozess"
      P1: liest Var1 "Ich bin ein lau" <wird suspended für P2>
      P2: schreibt Var1 "Ich bin ein rassiger Prozess"
      P1: liest weiter nach suspend "siger Prozess"
      => Vorher in Datei: "Ich bin ein laufender Prozess"
      => Jetzt in Datei: "Ich bin ein rassiger Prozess"
      => P1 liest: "Ich bin ein lausiger Prozess"
      Dies wird von einer Datenbank verhindert (Atomarer Zugriff).

    2. Weiterhin kannst du Daten in einer Datenbank gegebenenfalls sortieren, ihr Format nach auslesen beliebig anpassen etc.

    3. Auch komprimiert die Datenbank gegebenenfalls die eingepflegten Daten.

    Grüsse,
    Richard