Ladezeiten zu groß... wie besser werden?

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

  • Ladezeiten zu groß... wie besser werden?

    Hallo zusammen,

    ich programmiere gerade ein Projekt, das weitreichende Kalkulation im Hintergrund hat, die jeden Tag per Cronjob im Hintergrund aufgerufen werden kann.

    Bis jetzt benötigt ein Durchlauf 0,20sec... es wird aber noch umfangreicher, sodass ich pro Durchlauf 1sec benötige (gemessen mit microtime)

    Das Problem ist, dass es durch aus 100.000+ User und demnach genauso viele Berechnungen geben wird. Das ist aber zeitlich nicht machbar... weil ein Tag nur 24 Stunden hat und ich das ganze eigentlich in 2 Stunden erleidgt haben wollte...

    Was für Lösungen gibt es... (ich werde von meiner Seite aus versuchen, die Berechnungen zeitlich zu verbessern, gehen wir aber von 1sec pro User aus)
    Was kann man tun? Kann man per Cronjob Beispielsweise das Script 100x pro Sekunde aufrufen? Oder würde ein besserer Server aushelfen...

    Ich habe schon einiges programmiert, aber bin noch nie vor solch ein Problem gestellt worden. Auch Cronjobs, Server etc... sind nicht mein Spezialgebiet...

    Kann mir jemand helfen?

  • #2
    ein besserer server oder noch besser - mehrere server mit kleverem load balancing sind immer schneller. interssanter für mich ist die frage, was das für eine komplexe berechnung ist, dass man lieber einen neuen server zulegt, als den code an langsamen stellen zu optimieren.

    Kommentar


    • #3
      im prinzip ist es eine excel tabelle, die mit variablen gefüttert wird und dann berechnungen anstellt. es sind ungefähr 190 zeilen mit je 7 Formeln. Verändert sich der Wert in einer Zelle, muss ja wiederum alle Zellen, die sich auf diese beziehen neu berechnet werden...

      Jetzt im Test gibt es 15 Zeilen, diese führen zu 435 Berechnungen in 0,3 sec... vllt bin ich auch total auf den kopf gefallen und man kann das einfacher halten?

      aber im prinzip errechnet excel ja auch alle folgeformeln neu sobald sich ein wert in einer zelle verändert...

      oder?

      Kommentar


      • #4
        Ich kann mir jetzt schwer vorstellen, was ein excell-sheet mit einem prozedualen Script zu tun hat. Was genau machst du?

        Kommentar


        • #5
          es geht um eine umfangreiche matrix für ein browsergame... diese ist in excel sozusagen niedergeschrieben und ich habe sie eben in php nun dynmaisch programmiert...

          wenn man sich nun excel vorstellt, gibt es ca 190 zeilen mit je 7 formlen die sich wiederum aus werten der anderen formeln errechnen... (in diese formeln gehen dann auch statische werte aus einer db ein)... bei 15 zeilen, brauche ich 435 berechnungen, weil sobald sich eine zelle neu berechnet ich alle zellen, die sich auf dies beziehen wiederum neu berechnen muss...

          hoffe, es ist einigermaßen verständlich...

          Kommentar


          • #6
            ja, verständlich schon. nur kann man dir schlecht helfen.

            Kommentar


            • #7
              wie meinst? es gibt ja keine andere möglichkeit, als bei jeder änderung die zellen die sich darauf beziehen neu zu berechnen oder?

              warum schafft das excel so schnell?

              was wäre eine lösung. schnellere server?

              Kommentar


              • #8
                Code-Benchmarking?
                Mal überlegen, ob so komplexe Berechnungen überhaupt notwendig sind, oder nicht vollkommen überzogen~ etc...

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  angenommen, die formeln werden in diesem umfang benötigt...

                  ist es möglich, per cronjob mehrermals das gleiche script aufzurufen oder würde das nur den server überlasten und wiederum langsam machen...
                  habt ihr keine lösungsvorschläge?

                  Kommentar


                  • #10
                    mehrere Cronjobs können das Script mehrfach anstoßen. Wie sich das ganze auf deinen Server auswirkt, vermag ich nicht zu sagen.

                    Wenn kein optimierungspotential vorhanden ist, ist PHP evtl. die falsche Sprache?

                    Unseren Lösungsvorschlag, lehnst du leider stur ab!

                    Kommentar


                    • #11
                      Warum machst du die Berechnungen nicht in PHP?

                      Kommentar


                      • #12
                        macht er doch?

                        Kommentar


                        • #13
                          er soll einfach mal benchmarken und wir sollen nicht herumraten. wenn sich herausstellt, dass die meiste zeit darauf verschwendet wird, irgendwelche unnötigen zwischenwerte in eine xls datei auszulagern, werden wir ihm wiederholt dazu raten, die daten in einer datenbank zu speichern. die "komplizierten berechnungen", die "in diesem umfang notwendig sind" werde ich auch so lange anzweifeln, bis ich sie sehe.

                          ich tippe pauschal auf optimierunspotential in der architektur der anwendung. letztens erst wollte hier jemand für ein "browsergame" wissen, wie er mit einem cronjob alle paar sekunden irgendwelche einheiten vergibt, anstatt sie dann zu berechnen, wenn die anzeige angefordert wird.

                          Kommentar


                          • #14
                            Re: Ladezeiten zu groß... wie besser werden?

                            Original geschrieben von comfreak
                            Hallo zusammen,

                            ich programmiere gerade ein Projekt, das weitreichende Kalkulation im Hintergrund hat, die jeden Tag per Cronjob im Hintergrund aufgerufen werden kann.
                            dann kannst du das ergebnis zwischen speichern und damit ist deine frage nach 100.000 usern nicht mehr gegeben. geschickt gespeichert, können 1.000.000 user darauf zugreifen, dein cron hat die eigentliche arbeit ja schon erledigt.

                            Original geschrieben von comfreak

                            Bis jetzt benötigt ein Durchlauf 0,20sec... es wird aber noch umfangreicher, sodass ich pro Durchlauf 1sec benötige (gemessen mit microtime)

                            Das Problem ist, dass es durch aus 100.000+ User und demnach genauso viele Berechnungen geben wird. Das ist aber zeitlich nicht machbar... weil ein Tag nur 24 Stunden hat und ich das ganze eigentlich in 2 Stunden erleidgt haben wollte...

                            dein cron sollte von der anzahl an usern vollkommen unberührt bleiben, da sie wie oben schon geschrieben das ergebnis des crons von vorher auslesen wird.

                            so wie ich den thread verfolge, hast du entweder ein problem mit der formulierung deines problems oder damit, das ergebnis deines crons zu interpretieren.
                            dritte (für mich die derzeit wahrscheinlichste) variante deines problems könnte sein, dass du die funktion und den sinn von cron nicht erfasst hast, da dein cron niemals von jedem user einzeln angestossen werden sollte, sonst wäre cron die falsche wahl (unter linux kann der befehl man cron helfen).

                            ps.
                            so provokant das von mir klingen mag, es ist nicht wirklich so gemeint. wenn dein cron in knapp 1 sekunde dein problem (berechnung) abarbeitet, verstehe ich dein problem nicht wirklich. normalerweise kannst du wesentlich mehr zeit benötigen, da cron ein ERGEBNIS liefert, dass dann von den usern nur noch als ausgabe abgefragt wird.

                            Kommentar


                            • #15
                              Sag mal, bin ich so falsch, oder liegt ihr so falsch?

                              Der TO hat doch deutlich davon gesprochen, dass Pro User ca 0,3 - 1sek zeit verbraten wird. Wer redet hier nun von 1 Cron pro User, oder davon, dass das Script nur eine sekunde brauchen würde???

                              Kommentar

                              Lädt...
                              X