Ladezeiten zu groß... wie besser werden?

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

  • #16
    1 cron pro user macht doch keinen sinn, da lasse ich den cron gleich weg und mache das per sript.
    wenn jeder user einzeln einen cron anstösst, wird das cron prinzip vollkommen falsch verstanden.

    Kommentar


    • #17
      1 cron pro user macht doch keinen sinn, da lasse ich den cron gleich weg und mache das per sript.
      wenn jeder user einzeln einen cron anstösst, wird das cron prinzip vollkommen falsch verstanden.
      Ich wiederhole mich, von einem Cron pro User hat hier niemand gesprochen!

      Kommentar


      • #18
        Interessantes Problem!!
        Wenn ich jetzt noch verstehen würde, worum es sich dreht......
        evtl. kann man da wirklich noch optimieren oder sinnfreies Zeugs weglassen..

        Leider scheinen die Formeln geheim bleiben zu müssen..
        Zuletzt geändert von combie; 17.08.2007, 00:18.
        Wir werden alle sterben

        Kommentar


        • #19
          Guten Morgen zusammen...

          ich merke dass das teilweise hier leider in die falsche Richtung geht... es wird nicht 1 cron pro user aufgerufen, sondern der cron berechnet für jeden user diese matrix und pro durchgang benötigt er jetzt bereits 0,3 sec... wobei die matrix nur ca 20 % fertig gestellt ist...
          bei 100.000 gibt berechnet der cron für jeden dieser 100.000 user die matrix neu --> 100.000*0,3sec= 30.000 = 8,3h...

          Ich kann auch leider nicht erst diese berechnung ausführen sobald ein user sich einloggt, etc... da es durchaus sein kann, dass man mehrere tage nicht online kommt... die berechnung aber jeden tag ausgeführt werden muss...

          die formeln kann ich leider nicht offen legen, tun aber an sich auch nichts zur sache...

          stellen wir uns excel vor...

          A B C D E F
          1
          2
          3
          4
          5
          6
          7


          In D1 steht A1+B1/100*C1
          In D2 steht A1-B1*100/D1
          In E3 steht (D1-100)*D2
          In E4 steht E3/(A4+B4)

          Soweit ist das eigentlich einfach... wir berechnen einfach der Reihe nach D1, D2, E3, E4 und können somit auf die Ergebnisse zugreifen. zum Beispiel greift E4 auf das Ergebnis von E3 zu...

          Nun das Problem:
          heißt D1 nun: A1+E4
          und wir berechnen wieder D1,D2,E3,E4 haben wir das Problem dass in D1 nur der Wert von A1 steht weil E4 zu diesem Zeitpunkt noch nicht berechnet wurde... Also sucht das Script nach jeder Berechnung (hier E4) nach allen Formlen die sich auf E4 bezihene (hier also: D1) und berechnet diese neu... so jetzt wurde D1 neu berechnet, D2 bezieht sich auf D1 und muss wiederum neu berchnet werden... etc... so geht das immer...

          Deshalb ist die Berechnung auch so ausführlich... Habe ich hier schon einen Denkfehler und man kann hieran was optimieren?
          Zur Info: Die Ergebnisse werden in einer DB gespeichert... also nichts mit Excel schreiben, das dient nur zur Anschauung der Beschreibung hier...

          So ich hoffe, die Vorgehensweise ist euch klar!? Diese Berechnung muss pro User pro Tag 1x durchgeführt werden... und braucht pro Durchgang bei nur 80 Formlen 435 Berechnungen und 0,3 sec...

          Ein CodeBenchmarken werde ich ausprobieren... wie macht man das am besten - sry hab das noch nie gemacht...

          So 1. Frage: Habe ich in meiner Vorgehensweise der Berechnung einen Gedankenfehler sodass man das verbessern könnte?

          2. Frage: Falls es wirklich nicht geht, wie kann ich gewährleisten, dass ich diese ganzen Berechnungen bei 100.000+ Usern mit 600 Formeln in 2h Stunden schaffen kann... Es wurde beispielsweise empfohlen den Cron mehrmals pro sekunde anzustoßen... ist das möglich, oder würde das wiederum nur den Server überlasten und jede Berechnung in die Länge ziehen, sodass ich am Ende das gleiche Ergebnis hätte??

          Ich hoffe, allen ist einigermaßen klar um was es geht... freue mich auf eure hilfe
          Grüße
          Philipp

          Kommentar


          • #20
            Völlig verständlich, dass du die Formeln nicht offenlegen möchtest.
            Aber nenne doch bitte wenigstens ein paar generelle Details zum Projekt. Ist es ein Browsergame oder ein Börsenportal?
            Woher kommen die Formeln und Daten? Kann der User sie selbst eingeben oder haben viele/alle User die selben Formeln und Daten?
            Werden die Ergebnisse für einen User von denen der anderen beeinflußt?
            Wieso muß die Berechnung jeden Tag gemacht werden? Warum kannst du nicht mehrere Tage mit einmal berechnen?

            Btw: Kannst du sicherstellen, dass die keine Zirkelbezüge (A1=B1 und B1=A1) in den Formeln hast?

            Das Cron-Script mehrmals parallel zu starten kann helfen, muß aber nicht. Ob es in deinem Fall besser wäre, kann nur ein Test zeigen.

            Kommentar


            • #21
              Nun das Problem:
              heißt D1 nun: A1+E4
              und wir berechnen wieder D1,D2,E3,E4 haben wir das Problem dass in D1 nur der Wert von A1 steht weil E4 zu diesem Zeitpunkt noch nicht berechnet wurde... Also sucht das Script nach jeder Berechnung (hier E4) nach allen Formlen die sich auf E4 bezihene (hier also: D1) und berechnet diese neu... so jetzt wurde D1 neu berechnet, D2 bezieht sich auf D1 und muss wiederum neu berchnet werden... etc... so geht das immer...
              Warum bist du damit nicht schon viel früher rausgerückt? Anstatt immer drumrum zu reden.
              Deshalb ist die Berechnung auch so ausführlich... Habe ich hier schon einen Denkfehler und man kann hieran was optimieren?
              Bestimmt.
              Zur Info: Die Ergebnisse werden in einer DB gespeichert... also nichts mit Excel schreiben, das dient nur zur Anschauung der Beschreibung hier...
              Wie viele Queries sind das so im Durchschnitt?
              Ein CodeBenchmarken werde ich ausprobieren... wie macht man das am besten - sry hab das noch nie gemacht...
              Einfach mal suchen.

              Vorher noch zum Konzept:
              Sind es bei jedem User die gleichen Formeln?
              Warum wird es von a1-bis zn abgearbeitet? Hat diese Reihenfolge einen Grund? Wenn ja welchen?

              Kommentar


              • #22
                Warum bist du damit nicht schon viel früher rausgerückt? Anstatt immer drumrum zu reden.
                Sorry, dass die ausführliche Erklärung erst jetzt kam, dachte es reicht auch so

                Bestimmt.
                und weiter?? Wenn du um den heißen Brei herumredest bringt mir das auch nichts...

                Wie viele Queries sind das so im Durchschnitt?
                Es sind pro Zeile in der Matrix 1... plus ein paar Daten aus der DB. Also ungefähr Zeilen + 10 weitere Abfragen pro Durchlauf. Am Ende sind es ca 180 Zeilen, also 190 Abfragen... das ist schonmal einen Punkt den ich jetzt sofort versuchen werde zu beheben...
                ABER: es wird auf keinen Fall jede Berechnung zwischengespeichert, sondern vielmehr werden die ergebnisse in einem Array und das ganze am Ende als Ergebnis wiederum in die DB...

                Sind es bei jedem User die gleichen Formeln?
                Ja, die Formlen sind immer gleich. Werden aber dynamisch im Admin angelegt und sind so auch änderbar...

                Warum wird es von a1-bis zn abgearbeitet? Hat diese Reihenfolge einen Grund? Wenn ja welchen?
                Kein Grund... Irgendwo muss ich ja anfangen und ein Ende finden...



                Ist es ein Browsergame oder ein Börsenportal?
                Browsergame. Es geht um eine Staatsberechnung. Dafür ist die Matrix

                Woher kommen die Formeln und Daten? Kann der User sie selbst eingeben oder haben viele/alle User die selben Formeln und Daten?
                s.o. Für jeden User genau die gleiche Formel... aber unterschiedliche Daten...


                Werden die Ergebnisse für einen User von denen der anderen beeinflußt?
                Erstmal NEIN. Aber die vorherigen Ergebnisse sind wiederum wichtig für die folgenden Berechnungen. Es kann zum Beispiel sein, dass man immer den Wert von vor 10 Berechnungen braucht... Diese Daten werden dann explizit wiederum aus der DB geholt... (also es werden NICHT alle vorherigen geladen, sondern nur der einzelne benötigte Wert)

                Wieso muß die Berechnung jeden Tag gemacht werden? Warum kannst du nicht mehrere Tage mit einmal berechnen?
                Weil in der Statistik usw... alle auf dem gleichen Stand sein müssen um sie vergleichen zu können...

                Btw: Kannst du sicherstellen, dass die keine Zirkelbezüge (A1=B1 und B1=A1) in den Formeln hast?
                ja, deshalb wird die Matrix vor speichern auch immer getestet...

                ich werde nun weiter testen und versuchen zu optimieren... vllt habt ihr weitere idee... vor allem die reihenfolge der berechnung. ich bin mir nicht sicher ob das so nötig ist...

                Kommentar


                • #23
                  Warum wird es von a1-bis zn abgearbeitet? Hat diese Reihenfolge einen Grund? Wenn ja welchen?
                  Kein Grund... Irgendwo muss ich ja anfangen und ein Ende finden...
                  Aha, das ist der Knackpunkt.

                  Wenn du es jetzt noch schaffst, die Berechnung in der richtigen Reihenfolge durchzuführen, hast du null,nix nen Bruchteil der zeit.

                  Sorg einfach dafür, dass du zunächst die Formeln mit ziehst, die keine unbekannten haben. - diese berechnest du dann und machst weiter. immer so weiter.

                  Das ganze lässt sich sogar noch verbessern, wenn du dir beim abspeichern der Matrix eine Reihenfolge der Berechnung erstellst. Dann kannst du alle Formeln auf einmal holen (könntest du eigentlich sowieso) und dann in der richtigen reihenfolge berechnen. Fertig.

                  Einmalig mehr Aufwand, aber 100.000 mal weniger.

                  So, Rest DU! Ist ja dein Browsergame.

                  *move* nach BS

                  Kommentar


                  • #24
                    Hi...

                    jop du hast recht... die idee ist gut... nun brauch ich ein system wie ich die richtige reihenfolge berechne...

                    aber gerade schonmal optimiert... und zwar werden jetzt nur formeln neu berechnet die überhaupt schon berechnet wurde... vorher war es so: berechne ich A1 und es beziehen sich 10 formeln auf A1 werden diese sofort berechnet... das macht aber keinen sinn, da die ja auch noch andere daten brauchen und sowieso später nochmal aufgerufen werden... jetzt merkt sich das script also die bereits berechneten und ruft nur diese auf...

                    allerdings habe ich gerade beim ausgeben der microtime gesehen, dass an einer stelle, das script 0,04 sec hängen bleibt... also die voherige berechnung gibt mir 0,049 also verlaufene zeit und bei der nächste 0,089... das ist ganz schön happig...

                    hat jmd nie idee, wie man die richtige reihenfolge finden könnte?
                    gruß
                    philipp

                    Kommentar


                    • #25
                      hat jmd nie idee, wie man die richtige reihenfolge finden könnte?
                      Nee, jetzt werd DU erstmal selbst Kreativ, du ziehst hier absolut grundlegende Überlegungen, und weil das so gut klappt, schaltest du jetzt erstmal auf faul?

                      DEIN Browsergame, DEIN Verdienst, DEINE Arbeit!
                      Zuletzt geändert von TobiaZ; 17.08.2007, 12:33.

                      Kommentar


                      • #26
                        Serverseitige Optimierung?

                        Ok... das mit dem optimieren ist die eine Sache... das ist MEIN brot und ich denke erstmal ALLEINE weiter...

                        Das geht ja erstmal um die primäre optimierung der benötigten ladezeit.

                        dennoch stehe ich vor dem problem... dass wenn ich bei 100.000+ (nehmen wir mal blöde an es werden 500.000) user und ich schaffe einen durchlauf in 0,1sec --> dann würde ein script 13,9 Stunden dafür benötigen... ich habe allerdings maximal 2 Stunden Zeit...

                        Kann mir jemand hierfür einen Tip geben. Erreicht man das mit mehreren Servern, mehrmals den Cronjob aufrufen, etc... es geht mir also wirklich darum wie man das serverseitig beschleunigen kann...

                        Kann mir da jmd helfen?

                        Kommentar


                        • #27
                          Du solltest dir auch überlegen, ob PHP wirklich die richtige Kanone für sowas ist...

                          evtl. ist ein Service oder Deamon, welcher in einer nativen Sprache geschrieben ist, wie z.B. C++ oder FreePascal, besser für diese Aufgabe geeignet
                          Wir werden alle sterben

                          Kommentar


                          • #28
                            Von 13 auf 2 Stunden ohne Änderungen am Algorithmus geht nur durch massiven Hardwareeinsatz. Wenn 1 Server 13 Stunden rechnet, dann sind 7 Server in ca. 2 Stunden fertig.

                            Dein Algorithmus ist stark verbesserungsbedürftig. Da du keine Details nennst, kann dir dabei keiner helfen.
                            Ich bezweifle allerdings auch, dass es das Game besser macht, dass es für jeden User für jeden Tag eine Matrix mit 190*x sich gegenseitig beeinflussenden Werten gibt. Das kann kein Mensch mehr nachvollziehen. Ich schlage vor, du reduzierst die Anzahl auf <<180 Werte und jeder berechnet sich unabhängig, also etwa $x = $x + $trend_x wobei der generelle Trend ja durchaus sehr viele andere Werte einbeziehen kann. Er wird aber für alle User nur einmal berechnet, evtl. sogar nur alle paar Tage.
                            Bei 180 Werten müßtest du also 180 Trends/Faktoren berechnen. Diese 180 Rechnungen sind sicher sehr aufwändig, aber selbst wenn eine 10 Sekunden dauert, bist du in 30 Minuten durch.
                            Die Neuberechnung aller Userdaten kannst du dann sogar mit nur einer einzigen Query erschlagen:
                            UPDATE user_vars SET a=a+$trend_a, b=b+$trend_b, ...
                            Der DB-Server schafft das bestimmt in weniger als 90 Minuten, wenn nicht, machen wir ihm Beine.

                            Fazit: Man kann dir wegen mangelnder Informationen nur sehr allgemeine Tipps geben und der vielversprechendste Ansatz ist eine drastische Reduktion der Komplexität. Anders wirst du dein 2h-Ziel niemals erreichen.
                            Zuletzt geändert von onemorenerd; 17.08.2007, 13:20.

                            Kommentar


                            • #29
                              gut, dein problem wurde also erst mal klar gestellt.
                              mit deinen formeln scheinst du die weltherrschaft an zu steben, denn es wird immernoch nichts von dem veröffentlicht, was das nun so kompliziert berechnet werden soll. wie soll man da helfen zu optimieren ??

                              mein auto klappert, was ist das ??

                              Kommentar


                              • #30
                                Hallo nochmal...

                                dass die Formeln wohl geheim bleiben sollen ist klar... also kann ich davon nichts rausgeben. aber stellt euch einfach eine Excel Tabelle mit 180 Zeilen und 12 Spalten vor. 5 Spalten werden mit fixen Werten aus der Datenbank gefüttert, die für jeden User unterschiedlich sind. Anhand dieser 5 Werte und den Ergebnissen früherer Berechnungen werden die jeweils 7 Formeln berechnet, die sich untereinander auch wieder aufeinander beziehen...

                                Dazu brauche ich jetzt ja keine genauen Formeln angeben, sondern das kann sich jeder selbst ausdenken...
                                Sorry nochmals, aber wenn ich die Formlen rausgebe, hat das Spiel keinen Sinn mehr...

                                So... ich werde versuchen von der Programmierseite das bestemöglichst zu optimieren... ist mir heute auch schon teilweise gelungen...

                                Meine Frage bezieht sich auf den Server: Wie kann man hingehen und dem Dampf machen? Was für Möglichkeiten gibt es? Mehrere Server, mehrmaliges Aufrufen des Cron? Das hier ist eine allgemeine Frage...

                                Kommentar

                                Lädt...
                                X