Kann man XML als zuverlässiges Backend nutzen?

Guten Tag,

Ich programmiere schon eine ganze Weile in PHP und habe bisher zum speichern meiner Daten immer auf MySQL oder andere Datenbanken zurückgegriffen.

Nun stehe ich vor einem Projekt bei dem ich definitiv keine Datenbank zur Verfügung habe, aber dennoch alle möglichen Daten wie beispielsweise Nutzerdaten, News- und Gästebucheinträge etc. speichern muss. Dabei kommt logischerweise nur das speichern in Dateien in Frage und da ich sehr gerne mit XML als Schnittstelle arbeite und es mittlerweile in PHP sehr schöne API’s dafür gibt, habe ich mich dafür entschieden.

Bevor ich aber nun Anfange stehe ich vor einem großen Problem, und das ist die Frage, wie ich das speichern der Daten zuverlässig regeln könnte. Auslesen einer Datei ist kein Problem, aber schreiben sehr wohl.
Was passiert beispielsweise, wenn sich das Speichern von Gästebucheinträgen verschiedener Nutzer zeitlich überschneidet? Was passiert wenn ich gerade einen neuen Newseintrag speichere und ein Nutzer in diesem Moment gerade aus der News-XML-Datei liest?

Es versteht sich von selbst, dass ein „Wrapper“ gebraucht wird, der schreib bzw. lese Anfragen der Nutzer puffert und diese dann chronologisch (nach dem Zeitpunkt in dem sie aufgegeben wurden) abarbeitet.

Und an diesem Punkt scheitert mein Gedankengang, denn wie könnte man dies mit reinem PHP realisieren, ohne das der angesprochene Puffer für die Schreib- und Leseanfragen wiederrum als Datei implementiert wird, was mich in einen Teufelskreis führen würde?

Eine Idee wäre eine Nutzerübergreifende Session, von der ich nicht weis ob sowas existiert, und falls ja dann hängt diese Lösung mit sicherheit stark vom verwendeten Webserver resp. dessen Konfiguration ab.

Eine andere Idee wäre ein Eventgesteuertes Script, wobei da die Frage auftritt inwieweit PHP dies unterstützt. (Ich habe mal gehört dass die Software „Woltlab Burning Board“ ein Eventsystem beinhaltet, aber darüber habe ich mich nicht weiter informiert)

Meine Frage ist nun: Gibt es hier jemanden der sich bereits mit diesem Problem beschäftigt hat oder kennt jemand bereits eine Lösung? Hat jemand noch weitere Ideen wie man dies bewerkstelligen könnte?

Ich erwarte hier keinen Quellcode, aber es wäre schön wenn mir jemand seine Gedankengägne mitteilen könnte.

viele Grüße,

Unic

p.s. Ich weis, dass es bereits einen Thread mit einem ähnlichen Thema gibt, aber der hat mir leider nicht viel weiter geholfen.

Hallo Unic,

XML laesst sich natuerlich gut zum Speichern von Daten benutzen. Allerdings stellt fuer mich die Speicherung als XML, wenn man mal von der Interoperabilitaet der Daten absieht, kaum ein Vorteil gegenueber einer Speicherung als z.B. Textdatei dar. Beides muss vor der Behandlung der Daten geparst werden und ist somit fuer die Verarbeitung groesserer Datenmengen nur bedingt geeignet. Auch beim Speichern gibt es, wie du schon bemerkt hast, einige Probleme zu loesen. Filelocks stehen z.B. nicht auf allen Plattformen zur Verfuegung.
Als Alternative kann ich dir einen Blick auf SQLite empfehlen. Dabei handelt es sich um eine Datenbank, welche auf Dateiebene arbeitet und somit ohne Server auskommt. Die Daten koennen mit normalem SQL Syntax gelesen und geschrieben werden und um gleichzeitige Zugriffe braucht man sich wenig Sorgen machen. Auch die Geschwindigkeit ist gut. SQLite ist seit einiger Zeit ein Bestandteil von PHP und ist somit auch weit verbreitet.

Gruss
Stefan