azok: XML-file oder flat-file?

hi!

Ich wollte nur fragen, bevor ich irgendwann (wenn ich dazu komme *gg*) mein PLog-Script zu veröffentlichen, was denn eigentlich "sinnvoller" ist zum speichern der Einträge: normale *.dat-Dateien wo die Einträge durch Delimiter (|) bzw. \n getrennt werden, oder xml-files... (in PHP5 über SimpleXML)??

Danke schon im Voraus für eure Antworten!

lg
azok

--
Murphys Law: "Alles Schöne im Leben ist entweder illegal, ungesetzlich oder es macht dick."
Mein Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:( n4:° ss:) de:> js:| ch:? sh:) mo:) zu:)
  1. Moin,

    ...normale *.dat-Dateien wo die Einträge durch Delimiter (|) bzw. \n getrennt werden, oder xml-files... (in PHP5 über SimpleXML)??

    Das hängt von pers. Vorlieben ab. Ich würder in jedem Fall zu XML raten. Das macht spätere Umstellungen(MySQL und Co) um einiges leichter.
    Ich darf mich gerade mit einen solchen Prob. beschäftigen. Aus Flat-File->SQL. XML wäre mir lieber gewesen.

    Gruß
    SteBu

    1. Moin!

      Das hängt von pers. Vorlieben ab.

      Und von den Möglichkeiten, die man hat. Nicht immer steht ein XML-Parser zur Verfügung - da sind einfach parsbare Textdateien dann einfacher zu behandeln. Andererseits sind sie wegen ihrer Einfachheit auch extrem unflexibel.

      Ich würder in jedem Fall zu XML raten. Das macht spätere Umstellungen(MySQL und Co) um einiges leichter.

      Ich würde behaupten, dass eine Umstellung von XML auf relationale Datenbanken kein Fortschritt ist. :)

      Ich darf mich gerade mit einen solchen Prob. beschäftigen. Aus Flat-File->SQL. XML wäre mir lieber gewesen.

      Glaube ich kaum. Bei Flatfiles hast du ziemlich zwingend eine tabellarische Struktur, die gewöhnlich recht simpel in eine analoge DB-Tabelle übertragbar ist.

      Bei XML-Strukturen hast du immer das Problem, dass das XML sich so komplex zusammensetzt, dass du mit einer einzigen DB-Tabelle nicht auskommst, sondern gleich direkt alle Relationen mit berücksichtigen mußt. Abgesehen von der Schwierigkeit, solche komplexeren, potentiell rekursiven, Datensätze dann auch wieder auszulesen.

      - Sven Rautenberg

      1. Moin Sven,

        Ich würde behaupten, dass eine Umstellung von XML auf relationale Datenbanken kein Fortschritt ist. :)

        Ich schrieb nichts von Fortschritt. Man kann es sich ja auch nicht immer aussuchen. Da gibt es immer wieder mal sowas lästiges wie Kundenwünsche ;)

        Ste

      2. Hi Sven,

        Das hängt von pers. Vorlieben ab.

        Und von den Möglichkeiten, die man hat. Nicht immer steht ein XML-Parser zur Verfügung - da sind einfach parsbare Textdateien dann einfacher zu behandeln. Andererseits sind sie wegen ihrer Einfachheit auch extrem unflexibel.

        Gerade wegen dieser Unflexibilität hatten Tom und ich uns mal vor einiger Zeit darüber Gedanken gemacht und unsere Funktionssammlung FlatBox[1] entwickelt. Die Idee dahinter ist einfach - wir speichern einfach Arraystrukturen in den Textdatei, wodurch ...

        Glaube ich kaum. Bei Flatfiles hast du ziemlich zwingend eine tabellarische Struktur, die gewöhnlich recht simpel in eine analoge DB-Tabelle übertragbar ist.

        ... du keine gezwungende tabellarische Struktur mehr hast, sondern Datensätze mehrdimensional abspeichern kannst.

        Insofern: Man _kann_ mit FlatFiles schon ne ganze Menge machen, der Vorteil gegenüber XML ist eben, dass es standarisiert ist und du es aus so ziemlich allen Programmierpsprachen ansprechen kannst, ohne dir erst ein entsprechendes Interface basteln zu müssen.

        Ich würder in jedem Fall zu XML raten. Das macht spätere Umstellungen(MySQL und Co) um einiges leichter.

        Ich würde behaupten, dass eine Umstellung von XML auf relationale Datenbanken kein Fortschritt ist. :)

        ACK! ;-)

        MfG, Dennis.

        [1] Version 0.3 ist übrigens gerade in den letzten Entwicklungsphasen, wenn ich aus meinen 2 Wochen Urlaub jetzt zurück komme, haben wir (Tom und ich) vor die zu veröffentlichen - inklusive einer Dokumentation und Funktionsreferenz. ;-)

        --
        Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
        "Funktioniert nicht" hat exakt den selben Aussagewert wie "husseldiguggeldu" (Cheatah)
        1. Hallo,

          Insofern: Man _kann_ mit FlatFiles schon ne ganze Menge machen, der Vorteil gegenüber XML ist eben, dass es standarisiert ist und du es aus so ziemlich allen Programmierpsprachen ansprechen kannst, ohne dir erst ein entsprechendes Interface basteln zu müssen.

          Könntest du bitte nocheinmal zurechtrücken, was wessen Vorteil ist? Das ist aus deiner Satzkonstruktion nicht eindeutig.

          Ciao, Frank

          1. Hi Frank,

            Könntest du bitte nocheinmal zurechtrücken, was wessen Vorteil ist? Das ist aus deiner Satzkonstruktion nicht eindeutig.

            Ups, sehe ich auch grad ;-)
            Also:

            Insofern: Man _kann_ mit FlatFiles schon ne ganze Menge machen, der Vorteil

            von XML

            gegenüber

            dem Speichern in FlatFiles allgemein

            ist eben, dass

            XML

            standarisiert ist und du es aus so ziemlich allen Programmierpsprachen ansprechen

            bzw. einlesen

            kannst, ohne dir erst ein entsprechendes Interface basteln zu müssen.

            Jetzt ist es hoffentlich besser ;-)

            MfG, Dennis.

            --
            Mein SelfCode: ie:{ fl:( br:> va:) ls:[ fo:) rl:( n4:# ss:) de:] js:| ch:{ sh:| mo:} zu:|
            Schon gewusst, dass Bugs und Feature Vorschläge für das CForum ins Entwicklerforum oder in den BugTracker von WWWTech gehören und nicht hier her?
  2. Hallo,

    für beide Speichervarianten musst du ein Format definieren, für die .dat ein Format mit Delimitern (wie von dir erwähnt), für XML die Struktur aus Elementen und Attributen von einen Eintrag.

    XML hat bei den Nachteil, dass es je nach Schema mehr oder weniger Overhead erzeugt, aber es erzeugt definitiv mehr Overhead gegenüber der Flatfile Variante.

    Wenn die Verwendung des Flatfiles für dein Programm ausreicht, keine oft stattfindende Strukturänderung (entfernen oder hinzufügen von Loginformationen) vorgenommen wird, dann halte ich die Variante des Flatfile für effektiver (auch weil platzsparender) und _einfacher_.

    Möchtest du hingegen die Daten des Loggers publizieren, so dass andere Leute (speziell andere Software) etwas damit anfangen kann, ohne die Implementierung deines Programms zu kennen, dann empfiehlt sich (imho) eher XML, da es in Form von Element- und Attributnamen auch eine Beschreibung der Daten enthält. Kombiniert mit einem Schema (XSD) ließe sich auch die Form des Inhalts auf gültigkeit validieren.

    In Bezug auf spätere Migration in eine relationale Datenbank sehe ich für keine der beiden Seiten einen expliziten Vorteil.

    Ich weiß leider nicht, inwieweit OOP mit deinem Script möglich ist, aber vielleicht kannst du dein Script nach dem Mediator Pattern gestalten, so dass es bezüglich der Ausgabe verschiedene Implementierungsmöglichkeiten gibt (XML oder Flatfile oder DB).

    Grüße, Frank

  3. hi!

    Ich werde es mal probieren ;-). Schaden kanns ja nicht, und außerdem lernt man so XML kennen... Jedenfalls habe ich eine Frage im Moment dazu:

    Aussehen sollte das xml-File dann ungefähr so:

    <?xml version="1.0" encoding="iso-8859-1"?>
    <rss version="0.91">
    <PLog>
     <themen>
      <einThema>
       <vorname>Peter</vorname>
       <nachname>Heinrich</nachname>
       <email>heinrich_peter@hotmail.com</email>
       <inhalt>...inhalt des Themas, der eigentl. Text</inhalt>
       <datum>01.08.2005</datum>
       <zeit>12:50</zeit>
       <uniqid>558efasf668</uniqid>
      </einThema>
      <themen>
      <einThema>
       <vorname>Peter</vorname>
       <nachname>Heinrich</nachname>
       <email>heinrich_peter@hotmail.com</email>
       <inhalt>...inhalt des Themas, der eigentl. Text</inhalt>
       <datum>01.08.2005</datum>
       <zeit>12:51</zeit>
       <uniqid>2558ees6a52e</uniqid>
      </einThema>
     </themen>
    </PLog>
    </rss>

    meine Frage jetzt... wie bekomme ich da die Daten in das File hinein? (Das Auslesen ist kein Problem z.b:

    <?php
     $data = simplexml_load_file('themen.xml');
     foreach ($data->PLog->themen->einThema as $thema)
     {
       echo "
         $thema->vorname<br />
         $thema->nachname<br />
         ##etc...##
       ";
      }
    ?>

    aber das reinschreiben... wie gehe ich da am besten vor?? (sorry wegen des ungehilighten Code, aber ich vergesse immer die Syntax dafür ;-))

    Danke schon für eure Antworten im Voraus!

    lg
    azok

    --
    Murphys Law: "Alles Schöne im Leben ist entweder illegal, ungesetzlich oder es macht dick."
    Mein Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:( n4:° ss:) de:> js:| ch:? sh:) mo:) zu:)