Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Query offset

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Du brauchst nicht 1000 oder 150 Objekte auf einmal, sondern immer nur eines. Eine große Ergebnismenge bei MySQL heißt nicht, das die sofort in den RAM wandert. Schau dir z.B. bei http://si1.php.net/manual/de/pdostatement.fetch.php an wie das in PHP funktioniert.

    Kommentar


    • #17
      Vielen Dank an alle für die Meinungen! Für mich ist die Sache ab Seite 1 gelöst.

      Kommentar


      • #18
        Zitat von Tropi Beitrag anzeigen
        Eine große Ergebnismenge bei MySQL heißt nicht, das die sofort in den RAM wandert. Schau dir z.B. bei http://si1.php.net/manual/de/pdostatement.fetch.php an wie das in PHP funktioniert.
        Das eine hat mit dem anderen nix zu tun. Standardmässig holt sich PHP immer das komplette Resultset von der Datenbank. Wenn das nicht gewünscht ist muss das explizit angegeben werden... (mysqli_unbufferd_query oder bei pdo über die Konfiguration der Verbindung oder als Flag für den Query selbst)

        Kommentar


        • #19
          Zitat von erc Beitrag anzeigen
          Das eine hat mit dem anderen nix zu tun.
          Jein. Ich behaupte zu wissen das der jetzige Aufruf von query_things() ein Array mit 150 Elementen zurückgibt. Dieses Array bleibt muss im RAM bleiben. Dabei ist es egal ob diese Elemente vorher mit einem buffered oder unbuffered query geladen werden.

          Im Gegenzug muss, wenn man die Ergebniszeilen (result rows? ) einzeln bearbeitet (und einen unbuffered query benutzt), wesentlich weniger RAM zur Verfügung stehen. Anstatt also das Ergebnis auf mehrere Abfragen aufzuteilen sollte man lieber eine (unbuffered) Abfrage machen und sich dann das Ergebnis Zeile für Zeile holen, anstatt mehrere Abfragen und dann das jeweilige Teilergebnis als Ganzes.

          Kommentar


          • #20
            Zitat von Tropi Beitrag anzeigen
            Jein. Ich behaupte zu wissen das der jetzige Aufruf von query_things() ein Array mit 150 Elementen zurückgibt. Dieses Array bleibt muss im RAM bleiben. Dabei ist es egal ob diese Elemente vorher mit einem buffered oder unbuffered query geladen werden.
            Genau es handelt sich um eine API und diese holt sich 150 Elemente auf einen Schlag.

            Mit API schließt sich der Ansatz mit fetch zu arbeiten schon fast aus. Natürlich geht es auch.

            Kommentar


            • #21
              Zitat von No3x Beitrag anzeigen
              Es handelt sich um SQL Abfragen.
              Zitat von No3x Beitrag anzeigen
              Genau es handelt sich um eine API ...
              Da müsste man halt wissen was davon jetzt zutrifft...

              Außer natürlich query_things() gehört zur API und gibt dir immer X Elemente in einem echten Array zurück. Das ist dann halt ne blöde API, aber dann bleibt dir wohl echt kaum was anderes übrig als jedes mal ein paar (z.B. eben 150) auf einmal zu laden.

              Kommentar


              • #22
                Bitte nicht aus dem Kontext reißen.

                Zitat von erc Beitrag anzeigen
                Ein Query ist nicht zwangsläufig eine SQL Abfrage. Ich würde sagen hier geht es eher um ein Webservice...
                Zitat von No3x Beitrag anzeigen
                Es handelt sich um SQL Abfragen.
                bezog sich auf die Frage ob es sich um SQL oder Webservice handelt.

                Es handelt sich um eine API, die nicht die API der Datenbank ist sondern eine API von things. Die API greift dabei auf SQL zu. Nicht auf einen Webservice via SOAP oder JSON.
                Außerdem benutze ich die API und habe keinen Einfluss auf sie.

                query_things() liefert ein Array von Thing Objekten.
                Sorry, dass ich das Problem etwas abstrahiert habe, um Fokus auf das Offset zu richten.

                Kommentar


                • #23
                  Zitat von No3x Beitrag anzeigen
                  Außerdem benutze ich die API und habe keinen Einfluss auf sie.

                  query_things() liefert ein Array von Thing Objekten.
                  Ja, wie gesagt, das wäre ja dann das letztmögliche Verfahren.
                  Aber ja, in dem Fall kann man da (leider) nicht mehr machen.

                  Wenn erledigt, dann bitte auch oben auf "Erledigt" klicken.

                  Kommentar

                  Lädt...
                  X