Fabian: Hibernate ? altern. DAO, ORM

Hallo allerseits,

ich würde von euch gerne mal erfahren, wie ihr eure Persistenzschicht
handhabt. Laut meinen Informationen gibt es ja kein Hibernate für PHP ;-(

Welche Tools nutzt ihr für das Persistieren?

Hat einer bereits Erfahrungen mit guten Alterntiven gemacht?
Ist zB Propel eine Alternative?

Für Ratschläge und Informationen wäre ich sehr dankbar.

Thx
Fabian

  1. Hallo,

    habe ich irgendwelche Forenregeln missachtet oder was ist die
    Ursache dafür, dass mir keiner antworten mag?
    Kann mir nicht vorstellen, dass hier alle manuell die
    Queries schreiben.. ;-(

    Nichts für ungut.

    Grüße aus Berlin
    Fabian

    1. Hallo Fabian.

      habe ich irgendwelche Forenregeln missachtet oder was ist die
      Ursache dafür, dass mir keiner antworten mag?

      Vielleicht, weil keiner antworten *kann*?

      Kann mir nicht vorstellen, dass hier alle manuell die
      Queries schreiben.. ;-(

      Ich zum Beispiel habe keinen blassen Schimer, wovon du sprichst.

      Doch wenn jemand Ahnung von dem von dir angesprochenen Themenbereich hat, wird er dir sicher antworten.

      Einen schönen Donnerstag noch.

      Gruß, Mathias

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      debian/rules
      1. Hallo,

        Ok, mitterweile habe ich wohl - anhand der Reaktionen hier im Forum -
        eingesehen, dass meine Frage nur von jemanden hätte beantwortet
        werden können, der sich schonmal mit DAO oder ORM in Bezug auf PHP
        oder allgemein beschäftigt hat.

        Aber auf der anderen Seite war es ja auch irgendwie ein guter "Filter" ;-)

        Danke für deine Antwort.

        Fabian

    2. Hallo Fabian,

      habe ich irgendwelche Forenregeln missachtet ...

      nicht dass ich wüsste.

      oder was ist die Ursache dafür, dass mir keiner antworten mag?

      Vielleicht geht es noch anderen hier so wie mir: Ich habe keinen blassen Dunst, was du eigentlich willst.

      ich würde von euch gerne mal erfahren, wie ihr eure Persistenzschicht handhabt.

      Hä? Du fragst im Themenbereich PHP. Also was hat Persistenz hier verloren? Im Gegenteil: Ein PHP-Script "lebt" nur während der Bearbeitung _eines_ Requests. Was soll daran persistent sein? Geht es dir vielleicht um das vorübergehende Speichern clientspezifischer Daten (Sessions)? Dann sag das doch bitte deutlich.

      Laut meinen Informationen gibt es ja kein Hibernate für PHP ;-(

      So, jetzt also Hibernate. Darunter verstehe ich ein "Einfrieren" eines Programm- oder Systemkontextes, das bekannteste Beispiel dürfte der sogenannte Ruhezustand sein, wie ihn Windows auf manchen PCs anbietet. Aber wo soll ich wieder den Zusammenhang zu PHP sehen? Willst du deinen Server in den Ruhezustand schicken?

      Kann mir nicht vorstellen, dass hier alle manuell die Queries schreiben.. ;-(

      Das hört sich jetzt wieder eher an, als ginge deine Frage in Richtung Datenbanken. Aber ich kann mir immer noch nicht vorstellen, worum es dir eigentlich geht.

      Schönen Abend noch,
       Martin

      --
      TEAM: Toll, Ein Anderer Macht's.
      1. Hi,

        Das hört sich jetzt wieder eher an, als ginge deine Frage in Richtung Datenbanken. Aber ich kann mir immer noch nicht vorstellen, worum es dir eigentlich geht.

        doch doch, das hängt schon alles zusammen. Hibernate ist ein Java-Persistenz-Framework, mit dessen Hilfe sich ohne ein einziges Query Objekte speichern und wiederherstellen lassen, damit sie eben nicht so vergänglich sind wie normale Objekte/Daten in PHP. Ähnliches kennt man von Entity-Beans bei Enterprise Java Beans, nur dass man da ja einen ganzen Application Server außen herum hat. Hibernate ist da etwas schlanker bzw. zumindest mal standalone.
        Ich nehme an der OP sucht eine Möglichkeit Daten zu speichern ohne sie selbst zu speichern. Hibernate arbeitet beispielsweise mit XML-Dateien oder Annotations im Code. Leider ist mir nichts vergleichbares für PHP bekannt.

        MfG
        Rouven

        --
        -------------------
        Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
        1. hi,

          Ich nehme an der OP sucht eine Möglichkeit Daten zu speichern ohne sie selbst zu speichern. Hibernate arbeitet beispielsweise mit XML-Dateien oder Annotations im Code. Leider ist mir nichts vergleichbares für PHP bekannt.

          Doch, Sessions :-)

          (Wenn man mag, kann man ja immer die gleiche SID vor dem Starten der Session setzen, und die garbage collection für das Sessionverzeichnis abschalten - dann bleiben die Daten "unendlich" lange erhalten, und man braucht nur Daten in $_SESSION reinschreiben, speichern macht PHP beim Scriptende implizit, oder man nutzt session_write_close(). Und um ggf. erforderliches File Locking sollte sich PHP dabei m.W. auch selber kümmern.)

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hallo,

            Ich nehme an der OP sucht eine Möglichkeit Daten zu speichern ohne sie selbst zu speichern. Hibernate arbeitet beispielsweise mit XML-Dateien oder Annotations im Code. Leider ist mir nichts vergleichbares für PHP bekannt.

            Doch, Sessions :-)

            Hä?
            Informiere Dich mal - natürlich nur wenn Du magst - bezgl. Data Access
            Objects (DAO) oder Object Relational Mapping (ORM) und erkläre mir
            dann bitte noch einmal was die Session im entferntesten damit zu tun
            haben sollte..

            (Wenn man mag, kann man ja immer die gleiche SID vor dem Starten der Session setzen, und die garbage collection für das Sessionverzeichnis abschalten - dann bleiben die Daten "unendlich" lange erhalten, und man braucht nur Daten in $_SESSION reinschreiben, speichern macht PHP beim Scriptende implizit, oder man nutzt session_write_close(). Und um ggf. erforderliches File Locking sollte sich PHP dabei m.W. auch selber kümmern.)

            ???
            Es geht um generische oder automatisierte Zugriffe auf abstrahierte
            Datenbankobjekte. Die folge dessen ist es, dass man sich nicht
            die SQL-Queries selbst "zusammenschustern" muss sonder zB einfach
            mittels object.saveOrCreate() einen Datensatz speichert bzw neu
            anlegt. (*)

            Grüße
            Fabian

            * vorausgesetzt man hat sich die DB-Mappings zuvor generieren lassen
            (sei es anhand einer Datenbank oder aber durch XML)

            1. hi,

              Doch, Sessions :-)
              Hä?

              [ ] Du erkennst einen Smilie, wenn du ihn siehst, und weißt ihn zu interpretieren.

              gruß,
              wahsaga

              --
              /voodoo.css:
              #GeorgeWBush { position:absolute; bottom:-6ft; }
              1. Hallo wahsaga,

                [ ] Du erkennst einen Smilie, wenn du ihn siehst, und weißt ihn zu interpretieren.

                Ja klar erkenne ich Smilies - und interpretieren kann ich sie auch.

                Jedoch gab deine auf den Smily folgende Aussage

                (Wenn man mag, kann man ja immer die gleiche SID vor dem Starten der Session setzen, und die garbage collection für das Sessionverzeichnis abschalten - dann bleiben die Daten "unendlich" lange erhalten, und man braucht nur Daten in $_SESSION reinschreiben, speichern macht PHP beim Scriptende implizit, oder man nutzt session_write_close(). Und um ggf. erforderliches File Locking sollte sich PHP dabei m.W. auch selber kümmern.)

                nicht gerade das Bild, dass Du auch nur irgendwie weißt worum es überhaupt geht.

                Um Missverständnisse vorzubeugen hättest Du den Smily dann wohl am Ende bringen sollen... (vorausgesetzt Du meintest das wirklich nicht
                 ernst)

                Grüße aus Berlin
                Fabian

                1. hi,

                  Jedoch gab deine auf den Smily folgende Aussage [...]
                  nicht gerade das Bild, dass Du auch nur irgendwie weißt worum es überhaupt geht.

                  Die bezog sich auf Rouvens

                  Ich nehme an der OP sucht eine Möglichkeit Daten zu speichern ohne sie selbst zu speichern.

                  Das kann dem einen oder anderen ja mal hilfreich erscheinen - auch wenn es natürlich in einem gewissen Maße ein Missbrauch von Sessions ist.

                  Dass das nicht zu deinem gesuchten Modell passt, war mir aber klar.

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
                  1. Hallo wahsaga,

                    OK, dann haben wir ja soweit Missverständnisse beseitigt ;-)

                    Und, kennst Du nun irgendein Tool welches mir an dieser Stelle
                    weiterhelfen kann oder mit dem Du bereits gearbeitet hast?

                    Wie machst Du das denn - etwa wirklich manuell?

                    Thx
                    Fabian

                    1. hi,

                      Und, kennst Du nun irgendein Tool welches mir an dieser Stelle
                      weiterhelfen kann oder mit dem Du bereits gearbeitet hast?

                      Wie machst Du das denn - etwa wirklich manuell?

                      Hab sowas bisher noch nicht gebraucht - deshalb auch die nicht zum Thema passende Flachs-Antwort auf Rouven.

                      Wenn mir was bekannt wäre, hätte ich das gleich erwähnt.

                      gruß,
                      wahsaga

                      --
                      /voodoo.css:
                      #GeorgeWBush { position:absolute; bottom:-6ft; }
                      1. Hallo wahsaga,

                        Naja, ich hoffe ich finde das etwas schönes für PHP.

                        OK, Dir vielen Dank.

                        Fabian

                        PS: Sich die Sache mal anzuschauen lohnt sich wirklich.
                        Ich kenne das aus dem Java-Bereich und muss sagen, dass
                        ich Hibernate nicht mehr missen möchte ;-)

                    2. Hej,

                      Wie machst Du das denn - etwa wirklich manuell?

                      Meine (bisher noch kurzfristige) Erfahrung sagt mir, dass das oft der schnellste und flexibelste Weg ist programmiertechnische Vorhaben zu realisieren. In der Informatik nennt man das glaube ich KISS ;) (der deutsche Artikel taugt nix).

                      Ich hab mich auch mal mit Hibernate auseinandergesetzt und den Entschluss gefasst, es dann eben doch nicht zum Einsatz kommen zu lassen, weil das das berühmte mit-Kanonen-auf-Spatzen-Schießen geworden wäre. Das grundsätzliche Problem bei derartigen Frameworks ist eben, dass du meistens einen recht schlechten Kompromiss aus Performance und Flexibilität zugunsten von Robustheit und Stabilität bekommst. Hinzu kommt die Einarbeitung, die jenachdem auch sehr aufwendig ausfallen kann.

                      Je nach Größe des zu realisierenden Vorhabens, durchbrichts Du einfach nicht den "Break-Even-Point" im Hinblick auf die Implementierungs-Ersparnis. Das mein ich ganz generell und nicht nur auf Hibernate bezogen. Für php jedoch, welches ja maßgeblich im Lebensraum der Webserver seinem Dasein fröhnt, erreichen die Applikationen in den meisten Fällen wahrscheinlich schlicht nicht den Umfang, dass sich die Etablierung eines solchen Frameworks gelohnt hätte.

                      Beste Grüße
                      Biesterfeld

                      --
                      Art.1: Et es wie et es
                      Art.2: Et kütt wie et kütt
                      Art.3: Et hätt noch immer jot jejange
                      Das Kölsche Grundgesetz
                      1. Hallo Biesterfeld,

                        Meine (bisher noch kurzfristige) Erfahrung sagt mir, dass das oft der schnellste und
                        flexibelste Weg ist programmiertechnische Vorhaben zu realisieren. In der Informatik
                        nennt man das glaube ich KISS ;).
                        Ich hab mich auch mal mit Hibernate auseinandergesetzt und den Entschluss gefasst, es
                        dann eben doch nicht zum Einsatz kommen zu lassen, weil das das berühmte mit-Kanonen-
                        auf-Spatzen-Schießen geworden wäre. Das grundsätzliche Problem bei derartigen
                        Frameworks ist eben, dass du meistens einen recht schlechten Kompromiss aus
                        Performance und Flexibilität zugunsten von Robustheit und Stabilität bekommst. Hinzu
                        kommt die Einarbeitung, die jenachdem auch sehr aufwendig ausfallen kann.
                        Je nach Größe des zu realisierenden Vorhabens, durchbrichts Du einfach nicht den
                        "Break-Even-Point" im Hinblick auf die Implementierungs-Ersparnis. Das mein ich ganz
                        generell und nicht nur auf Hibernate bezogen.

                        Nach meinen persönlichen Erfahrungen kann ich dem nicht so zustimmen.
                        Wenn man sich erst einmal eingelernt hat ist die aufzubringende Zeit
                        doch um Einiges geringer als bei dem manuellen Weg.
                        Allerdings kann ich hier nur von Java + hibernate sprechen.
                        Wie es in PHP aussieht, das werde ich die Tage mal schauen.

                        Habe in einer anderen Antwort bereits mein Für bezgl. einer Objekt-
                        Persistenz-Schicht und einer generierten DO-API geäußert.

                        Für php jedoch, welches ja maßgeblich im Lebensraum der Webserver seinem Dasein
                        fröhnt, erreichen die Applikationen in den meisten Fällen wahrscheinlich schlicht
                        nicht den Umfang, dass sich die Etablierung eines solchen Frameworks gelohnt hätte.

                        Da gebe ich Dir recht. Doch um ein Framework zu programmieren bedarf es dann
                        doch dieses Frameworks ;-)

                        Grüße aus Berlin,
                         Fabian

        2. Hallo Rouven,

          doch doch, das hängt schon alles zusammen. Hibernate ist ein Java-Persistenz-Framework, mit dessen Hilfe sich ohne ein einziges Query Objekte speichern und wiederherstellen lassen, damit sie eben nicht so vergänglich sind wie normale Objekte/Daten in PHP.

          Mein Wunsch ist eine Persistenzschicht mit all den schönen
          Ausprägungen von hibernate - oder zuminidest ansatzweise ;)
          Die Vergänglichkeit ist mir an dieser Stelle nicht so wichtig,
          dafür würde ich die Session und Caching-Mechanismen zu Hilfe
          ziehen.

          Ähnliches kennt man von Entity-Beans bei Enterprise Java Beans,
          nur dass man da ja einen ganzen Application Server außen herum hat.

          Jaa, ein Application Server für PHP.. das wäre schon was Schönes ;-)

          Ich nehme an der OP sucht eine Möglichkeit Daten zu speichern ohne
          sie selbst zu speichern.

          Ja, richtig - ein codegeneriertes API, was das für mich erledigt.

          Grüße aus Berlin,
          Fabian

      2. Hallo Fabian,

        sorry, wenn ich mich undeutlich ausgedrückt habe - jedoch
        hast Du dich mindestens im gleichen Maße "dumm" gestellt
        wie ich mich undeutlich ausgedrückt habe ;-)
        Denn ein Link war ja sogar mit angegeben - so wie ein
        paar Eckdaten (Persistenzschicht, Hibernate für PHP,
        Propel). Also konnte man durchaus erahnen worum es mir ging.

        Aber Du hast recht, ich bin meines eigenes Schicksals Schmied
        und hätte somit die Frage deutlicher formulieren sollen.

        Aber dennoch danke..

        Fabian

        1. Hallo,

          Hallo Fabian,

          oh, führt hier jemand einen Monolog? Bitte nicht stören ... ;-)

          sorry, wenn ich mich undeutlich ausgedrückt habe - jedoch
          hast Du dich mindestens im gleichen Maße "dumm" gestellt
          wie ich mich undeutlich ausgedrückt habe ;-)

          Nein, ich  hab mich nicht dumm gestellt, ich bin so dumm. :-)
          Die Begriffe und Akronyme, die du genannt hast, haben mir nicht das geringste gesagt (abgesehen von "Hibernate", und da lag ich auch noch falsch). Und bei

          ∑(Verständnis, Vorahnung, Wissen) = 0

          sehe ich auch keine Veranlassung, einem für mich ebenso unverständlichen Link zu folgen. Btw, ich hab's aus Neugier sogar gemacht, aber auf der verlinkten Website wieder nur böhmische Dörfer gefunden.

          Denn ein Link war ja sogar mit angegeben - so wie ein
          paar Eckdaten (Persistenzschicht, Hibernate für PHP,
          Propel). Also konnte man durchaus erahnen worum es mir ging.

          Nur wenn man generell eine Ahnung von datenbankorientierten Problemen hat.

          Schönen Abend noch,
           Martin

          --
          TEAM: Toll, Ein Anderer Macht's.
  2. echo $begrüßung;

    ich würde von euch gerne mal erfahren, wie ihr eure Persistenzschicht handhabt.

    Mangels Notwendigkeit bis jetzt noch gar nicht. PHP ist als ein relativ einfaches System erfunden worden. Natürlich kann man damit auch die komplizierten Konzepte nachbauen, aber nicht alle Konzepte, die anderswo erfolgreich/sinnvoll sind muss man auch unter PHP anzuwenden versuchen. Zu viele Zwischenschichten kosten nur zu viel Ausführungszeit.

    Wenn es darum geht, einmal abgefragte Daten aufzuheben, ist unter PHP im Allgemeinen das Nutzen eines Caches angesagt, z.B. APC.

    Dinge wie SDO sind erst seit Kurzem in Handbuch. Ich hatte noch keine Zeit, mich damit zu beschäftigen. Weitere Literatur dazu:
    An introduction to Service Data Objects for PHP
    Streamline working with XML in PHP using Service Data Objects - Part 1
    Streamline working with XML in PHP using Service Data Objects - Part 2

    echo "$verabschiedung $name";

    1. Hallo $begrüßung;

      erstmal vielen Dank für deine Informationen. Werde mir das zu Gemüte führen.

      Mangels Notwendigkeit bis jetzt noch gar nicht. PHP ist als ein
      relativ einfaches System erfunden worden. Natürlich kann man damit
      auch die komplizierten Konzepte nachbauen, aber nicht alle
      Konzepte, die anderswo erfolgreich/sinnvoll sind muss man auch
      unter PHP anzuwenden versuchen. Zu viele Zwischenschichten kosten
      nur zu viel Ausführungszeit.

      Das ist richtig. Für kleinere Homepages ist dies vielleicht nicht
      von Nöten. Jedoch denke ich, dass wir uns hier zeitlich lediglich
      in  einem Bruchteil einer Millisekunde befinden, was das zeitliche
      Inkrement betrifft, und somit - zumindest in größeren Projekten -
      Argumente wie die Portierbarkeit, Komfortabilität, Effizienz, Nerven,
      Zeit und somit Geld letztlich höher gewichtet werden können.

      Aber die Macher von propel scheinen da was relativ gutes auf die
      Beine gestellt zu haben. Hört sich auf den ersten Blick zumindest
      vielversprechend an: PHP5, MySQL5, Codegenerator, Object Persistence
      Layer, DB-Interface-Layer, XML-Schemata, XML-Datenbankobjekte,
      Exceptionhandling, Byte Code Cache, etc..)

      Wenn es darum geht, einmal abgefragte Daten aufzuheben, ist unter
      PHP im Allgemeinen das Nutzen eines Caches angesagt, z.B.
      APC.

      Ja, das findet auch Verwendung.

      Grüße aus Berlin,
      Fabian