Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

[PHP] Einträge Speichern: XML vs. Datenbank

Diskussion: [PHP] Einträge Speichern: XML vs. Datenbank im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Hallo, ich bin gerade dabei mir nen kleinen Blog zu schreiben und überlege gerade, was wohl die bessere Möglichkeit ...

Like Tree1Likes
  • 1 Post By xblax

Antwort
Alt 06.07.11, 15:53   #1 (permalink)
 
Benutzerbild von Henry
 
Registriert seit: 04.11.08
Henry Leistung: Facit NTK
Likes: 0
Standard [PHP] Einträge Speichern: XML vs. Datenbank

Anzeige

Hallo,

ich bin gerade dabei mir nen kleinen Blog zu schreiben und überlege gerade, was wohl die bessere Möglichkeit wäre die einzelnen Einträge zu speichern.

Weil ich früher sowas hauptsächlich mit ner MySQL-Datenbank realisiert habe, wollte ich es mir diesmal etwas einfacher machen: Ich speichere mit PHP den Text in einer .xml-Datei (mit simplexml), welche gleichzeitig als RSS-feed dient.

Meine Frage ist jetzt allerdings: Welche Variante ist vorzuziehen? In Sachen Performance, Sicherheit oder Erweiterbarkeit?

Danke schonmal für eure Antworten.

~ Henry

[edit:] Ich seh grad, dass es ne extra Sektion für Webgeschichten gibt. Vielleicht können die Mods den thread ja verschieben.

__________________
Gute Schachspieler planen fünf Züge voraus.
Herausragende nur einen. Den richtigen...

Geändert von Henry (06.07.11 um 16:04 Uhr)
Henry ist offline   Mit Zitat antworten
Alt 06.07.11, 16:46   #2 (permalink)
 
Registriert seit: 23.03.05
xblax Leistung: 8086
Likes: 22
Standard

Also ich denke einer richtigen Datenbank ist da eindeutig der Vorzug zu geben.

XML ist eher als Datenformat geeignet. Also dann wenn immer die kompletten Daten gelesen/geschrieben werden müssen. Du greifst aber immer nur auf einen kleinen Teil der Daten zu. Ab einer gewissen Anzahl von Einträgen wird die XML Variante miserabel skalieren.

Du wirst auch Probleme bekommen, sobald der Datenbestand von mehreren PHP-Prozessen paralell bearbeitet werden soll. Daten auf Dateisystem Ebene zu behandeln (was man mit XML tut) ist immer eine schlechte Idee, weil man es dann mit genau den Problemen zu tun hat die durch Datenbanksysteme gelöst wurden.

Verwenden könntest zu SQLite, PHP: SQLite - Manual
Deine Daten werden dann im Endeffekt auch nur in einer Datei auf der Fesplatte gespeichert, aber du hast die Vorzüge eines Datenbanksystems.
xblax ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 06.07.11, 17:14   #3 (permalink)
Themenstarter
 
Benutzerbild von Henry
 
Registriert seit: 04.11.08
Henry Leistung: Facit NTK
Likes: 0
Standard

Ok, vielen Dank!

Ich hatte wohl irgendwie noch im Kopf, dass ne Datenbank eher ein Performanceverlust bedeutet. Da wollt ichs mir wohl zu einfach machen...

Die Sache mit SQLite hört sich gut an, aber da spielt wohl mein webspaceanbieter nicht mit.

~ Henry
__________________
Gute Schachspieler planen fünf Züge voraus.
Herausragende nur einen. Den richtigen...
Henry ist offline   Mit Zitat antworten
Alt 06.07.11, 17:19   #4 (permalink)
 
Registriert seit: 23.03.05
xblax Leistung: 8086
Likes: 22
Standard

Wenn dein Webspace Anbieter PHP anbietet, ist es imho auch sehr wahrscheinlich, dass SQLite Unterstützung vorhanden ist. Das gehört zu den standard Features von PHP.
beavisbee likes this.
xblax ist offline   Mit Zitat antworten
Alt 07.07.11, 21:01   #5 (permalink)
 
Benutzerbild von mauralix
 
Registriert seit: 17.04.06
mauralix Leistung: 8086
Likes: 3
Standard

Also wenn man wirklich ein Blog noch selbst schreiben will, sollte man unbedingt eine Datenbank wie MySQL verwenden. Natürlich braucht eine DB ein bisschen Performance, aber wenn man seine Queries nicht ganz dämlich schreibt ist das heute kein Problem mehr
mauralix ist offline   Mit Zitat antworten
Alt 08.07.11, 00:16   #6 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Zitat:
Zitat von xblax Beitrag anzeigen
XML ist eher als Datenformat geeignet. Also dann wenn immer die kompletten Daten gelesen/geschrieben werden müssen. Du greifst aber immer nur auf einen kleinen Teil der Daten zu. Ab einer gewissen Anzahl von Einträgen wird die XML Variante miserabel skalieren.
Es kommt darauf an, wie man die XML-Struktur aufbaut und ob man alles in eine Datei packt oder auf viele Dateien aufteilt. Diverse Suchmaschinen nutzen z.B. als Index XML-Dateien und skalieren damit weitaus besser als es mit einer Datenbank überhaupt möglich wäre.

Zitat:
Zitat von xblax Beitrag anzeigen
Du wirst auch Probleme bekommen, sobald der Datenbestand von mehreren PHP-Prozessen paralell bearbeitet werden soll. Daten auf Dateisystem Ebene zu behandeln (was man mit XML tut) ist immer eine schlechte Idee, weil man es dann mit genau den Problemen zu tun hat die durch Datenbanksysteme gelöst wurden.
Auch das würde ich so pauschal nicht sagen. Mit ausreichend Festplatten-Cache oder gar RAM-Disks können die Zugriffe auf XML-Daten weitaus schneller sein als bei einer DB, die ihre Indexes erst in den RAM laden muss und wo Volltext-Suchen z.B. zumeist eher langsam sind. Hinzu kommt der Overhead, der bei DB-Zugriffen verursacht wird. Ausserdem hat man auf Dateisystemebene nicht das Problem der gelockten Daten, wie man sie z.B. von MyISAM-Tabellen u.a. kennt, die Volltextsuchen ermöglichen.

Allerdings denke ich auch, dass man bei einem Blog durchaus bei einer DB bleiben kann. 1. wird es von den meisten Webspace-Anbietern heutzutage angeboten, während der Plattenplatz oft stark eingeschränkt ist und 2. hat kaum ein Blog soviele Einträge, dass sich XML als Datenformat wirklich lohnen würde. In bestimmten Bereichen würde er vermutlich sogar schlechter skalieren (z.B. bei Archiv-Funktionen). Ausserdem ist eine Anpassung an einer Tabellenstruktur einfacher gemacht als wenn man diese Anpassung in einem XML-Schema für mehrere dutzend oder gar hundert Dateien machen muss.

Meine Einschätzung zu den 3 genannten Punkten:

Performance: XML +, Datenbank -
Sicherheit: hängt vom PHP-Code ab, allerdings kennt SQL-Injections jedes Skript-Kiddy, während die Notwendigkeit zur Manipulation von XML-Daten bei Blogs wohl von den wenigsten Angreifern erwartet wird; die werden erstmal versuchen SQL-Injections zu fahren
Erweiterbarkeit: XML --, Datenbank +
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist offline   Mit Zitat antworten
Alt 08.07.11, 10:52   #7 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Ich würde einfach sagen: Nimm einfach das, worauf du Lust hast.

Performance:
Bei MySQL hast du natürlich die Kommunikation mit der Datenbank, die Overhead verursacht. Dafür kann sie das Caching für dich übernehmen. Bei Verwendung von XML wirst du vermutlich für jeden Seitenaufruf das XML-Dokument parsen müssen, was deutlich mehr Overhead bedeutet. MySQL läuft ja weiter, und hier liegen die Daten strukturiert im Speicher, der Zugriff ist damit schneller. Hier sehe ich also MySQL vorne.
Wenn du wirklich stark skalieren willst, ist allerdings weder MySQL noch XML geeignet, hier brauchst du einen Cache, der dir die fertig generierten Seiten im RAM vorhält. (->memcached)
@bitmuncher: Welche Datenbanken setzen eigentlich speziell auf XML-Dateien zur Geschwindigkeitsoptimierung? Mir ist da gerade keine bekannt.

Sicherheit:
Wie Bitmuncher bereits gesagt hat: Wenn du keine Prepared Statements verwendest, hast du bei Verwendung von MySQL evtl. das Problem von SQL-Injections. Das ist aber bei MySQL als reiner Content-Quelle (d.h. nicht auch noch Passwort-Speicher) aber nicht so das Problem, solange du keine geheimen Daten speicherst.
Bei XML musst du natürlich genau so die Eingaben prüfen. Auch hier könnte dir jemand z.B. XML-Tags einschmuggeln, die dafür sorgen, dass deine Datenbank kaputt geht, oder dass dein Server Dinge anzeigt, die er nicht anzeigen sollte.
Hier sehe ich also keinen klaren Sieger.

Erweiterbarkeit:
Hier kommt es auf deinen Code an, und es ist wichtig, wie du gerne Daten ablegen möchtest. MySQL erweiterst du durch das Anlegen von weiteren Spalten, XML durch das Hinzufügen von Tags oder Feldern.

Auch eine Datenverwaltung auf XML-Basis ist einfach erweiterbar. Wenn du ein neues Datenfeld brauchst, dann fügst du das einfach nur bei neu angelegten oder aktualisierten XML-Dateien hinzu. Soll dann z.B. ein alter Eintrag angezeigt werden, der das Feld noch nicht hat, dann erkennt dein Code das und lädt einen Default-Wert.

Charakteristisch ist hier, dass du dir bei MySQL mehr Gedanken um die Struktur der Daten machen musst, und dass jeder Eintrag immer die gleichen Felder haben muss. Bei XML kannst du einfach alle Daten reinkippen, so wie du die gerade brauchst, musst dir aber beim Auslesen ein paar mehr Gedanken machen.
Eydeet ist offline   Mit Zitat antworten
Alt 08.07.11, 11:06   #8 (permalink)
 
Registriert seit: 12.08.10
mime Leistung: Pentium Imime Leistung: Pentium I
Likes: 30
Standard

Zitat:
Zitat von Eydeet Beitrag anzeigen
Wie Bitmuncher bereits gesagt hat: Wenn du keine Prepared Statements verwendest, hast du bei Verwendung von MySQL evtl. das Problem von SQL-Injections. Das ist aber bei MySQL als reiner Content-Quelle (d.h. nicht auch noch Passwort-Speicher) aber nicht so das Problem, solange du keine geheimen Daten speicherst.
Code:
SELECT ... INTO OUTFILE ...
SQL-Injections bedeutet nicht nur das Auslesen von "geheimen" Daten. Die Angriffsvektoren sind schon etwas vielfältiger.

Micha
__________________
http://www.openvas.org
mime ist offline   Mit Zitat antworten
Alt 08.07.11, 11:15   #9 (permalink)
 
Benutzerbild von Eydeet
 
Registriert seit: 14.04.06
Eydeet Leistung: Facit NTK
Likes: 4
Standard

Da hast du recht. Man muss natürlich auch noch beim Einrichten der Datenbank aufpassen, dass man da keine Fehler macht. Zum Beispiel sollte man sich nicht mit einem Benutzer anmelden, der mehr Berechtigungen als nötig hat. Afaik braucht man das "FILE"-Privileg, um durch SQL Dateien zu lesen und zu schreiben, oder?
Außerdem muss man auf so Dinge aufpassen wie, dass man mit einem Aufruf von mysql_query nicht mehrere Queries starten kann. Dann könnte man nach einem SELECT-Aufruf ein UPDATE/DELETE laufen lassen. Ich kenne mich mit der Einrichtung von MySQL allerdings nicht so aus, und würde mir das auch nicht zutrauen.
Einigen wir uns auf: Man sollte auf jeden Fall prepared statements benutzen?
Eydeet ist offline   Mit Zitat antworten
Alt 08.07.11, 13:29   #10 (permalink)
Moderator
 
Benutzerbild von bitmuncher
 
Registriert seit: 30.09.06
bitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcorebitmuncher Quadcore
Likes: 441
Standard

Zitat:
Zitat von Eydeet Beitrag anzeigen
@bitmuncher: Welche Datenbanken setzen eigentlich speziell auf XML-Dateien zur Geschwindigkeitsoptimierung? Mir ist da gerade keine bekannt.
Ich sprach nicht von Datenbanken, sondern von Suchmaschinen, die mit XMLs als Index arbeiten.

Zitat:
Zitat von Eydeet Beitrag anzeigen
Auch eine Datenverwaltung auf XML-Basis ist einfach erweiterbar. Wenn du ein neues Datenfeld brauchst, dann fügst du das einfach nur bei neu angelegten oder aktualisierten XML-Dateien hinzu. Soll dann z.B. ein alter Eintrag angezeigt werden, der das Feld noch nicht hat, dann erkennt dein Code das und lädt einen Default-Wert.
Hach, wenn es doch so einfach wäre. Ich hab bis vor einigen Monaten in einer Firma gearbeitet, die sich auf Suchen für Websites spezialisiert hat. Wenn dort das Index-Schema geändert wurde, bedeutete dies bei grossen Indexes jedes Mal mehrere Stunden zum "Konvertieren" der XML-Dateien in's neue Format. So einfach ist die Erweiterung also nicht, vor allem dann nicht, wenn Felder/Tags hinzukommen, die nicht einfach mit Default-Werten belegt werden können, weil ihr Wert abhängig von anderen Feldern/Tags sein muss. Und das ist leider häufiger der Fall als man vermuten würde.
__________________
Mein Blog - Mein Job - Diaspora

Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund.

Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+
bitmuncher ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » [PHP] Einträge Speichern: XML vs. Datenbank
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61