15.000 Datensätze in Mysql per script aktualisieren

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

  • 15.000 Datensätze in Mysql per script aktualisieren

    Hallo zusammen,

    ich habe ein Problem, sonst würde ich ja hier nicht schreiben.
    Also:

    Ich habe eine Datenbank mit ca. 160.000 Einträge. Hierfür bekomme ich täglich ein Update, dass heißt ich bekomme eine Textdatei mit ca. 15.000 Datensätzen, wo Änderungen der 160.000 Datensätze vermerkt sind. Also Daten die sich geändert haben, neue Daten und Datensätze die gelöscht werden können. Diese Textdatei lese ich zeilenweise mit einem PHP-Script aus und andere dann die Datenbank. Das heißt eine Schleife mit 15.000 Durchgägnen.

    In letzter Zeit ist der Traffic auf meiner Seite angestiegen, sodass immer ca. 200 Besucher auf der Seite sind. Dadurch läuft das Script nicht mehr durch bzw. es bricht ab.

    Jetzt meine Frage gibt es eine bessere Möglichkeit die Datensätze zu aktualisieren oder gibt es die Möglichkeit die Datenbank für den Update zu sperren.
    Für Lösungsansätze wäre ich euch dankbar.

    Ingo

  • #2
    Wann treffen die Daten ein bzw. wie wichtig ist es das die Daten sofort geupdated werden?

    Wenn das ganze relativ entspannt zu sehen ist, würde ich das ganze via Cronjob Nachts machen. Da werden bestimmt keine 200 User auf der Seite sein.

    Kommentar


    • #3
      Daran habe ich auch schon gedacht. kann man denn ein php-script per crown job ausführen oder ist es besser ein sql-statments zu schreiben und dieses dann hochzuladen. Jetzt ist es so, das das Programm einen bestimmten Datensatz aus der Datenbank sucht und diesen dann mit delete oder update, insert verändert. Das ganze dauert dann ca. 8 Minuten bis die 15000 Datensätze abgearbeitet sind.

      Kommentar


      • #4
        mh, mann könnte die änderungen auch verzögern, so das nicht alles auf einmal gemacht wird sondern bspw. alle 20 sekunden n datensätze.
        MfG
        aim
        Lies mich jetzt!
        - OT-Tags-Liebhaber und BB-Code-Einrücker -

        Kommentar


        • #5
          Alternativ nicht für alles ne eigene Query. DELETES oder INSERTS, da kann man hervorragend mehrere mit 1 Query einfügen / löschen.


          Zu deiner Frage: Um Tabellen zu sperren, schau dir mal LOCK TABLES an.
          Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
          var_dump(), print_r(), debug_backtrace und echo.
          Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
          Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
          Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

          Kommentar


          • #6
            LOCK TABLES habe ich mir auch schon durchgelesen. Mein Problem ist nur noch, wie kann ich den user Mitteilen, das im Moment die Datenbank gesperrt ist. Ohne diese Mitteilung würder er doch eine Fehlermeldung bekommen??? Also sprich wie fange ich dies ab.

            Auch möchte ich mich für die schnellen Antworten bedanken.

            Ingo

            Kommentar


            • #7
              Überprüfe, ob die Tables gesperrt sind. Wenn das der Fall ist, gebe eine Meldung auf der Seite aus, dass die DB für 10min oder so nicht zugänglich ist!

              Kommentar


              • #8
                Ganz profane Möglichkeit:

                Datei anlegen mit Namen locked, irgendwas reinschreiben und dann abspeichern

                Tabelle sperren

                Daten einspielen

                Tabelle entsperren

                Datei [u[locked[/u] löschen

                Andere Skripte prüfen, ob die Datei locked existiert


                Oder einen Wert in eine andere Tabelle schreiben, die du nicht sperrst, oder oder oder
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  Original geschrieben von Shurakai
                  [B]Alternativ nicht für alles ne eigene Query. DELETES oder INSERTS, da kann man hervorragend mehrere mit 1 Query einfügen / löschen.
                  Das geht sogar (begrenzt) für UPDATES mit etwas SQL-TRicksen -- damit kannst Du deine 16.000 Updates sicherlich auf 1000 oder weniger drücken

                  Siehe CASE ...

                  allerdings bleibens dann immer noch einige --

                  Aber waws spricht gegen eine Ankündigung, dass jeden Tag um 5.00 der Server für 10min oder so evtl langsam läuft oder nicht erreichbar is und dann die sache per cronjob reinjagen?
                  chansel0049
                  ----------------------------------------------------
                  if you've reached the bottomline - dig further!
                  Übersetzer gesucht? http://www.babelport.com

                  Kommentar


                  • #10
                    PHP per Cron:

                    wget http://www.meinesetie.de/scripts/machmischcron.php

                    du rufst quasi die seite auf, und das eben per cron....

                    Kommentar


                    • #11
                      Moin,

                      bei mir wird um 3 Uhr morgens der Login gesperrt und ne Meldung an alle verbliebenen User abgelegt, dass der Server um 3.30 gewartet wird und mit Performanceverlusten zu rechnen ist (beides über einen CRON).
                      Um 3.30 Uhr geht dann das Update los , anschließend kommt das Backup, und um 4Uhr wird der Login wieder frei geschaltet.
                      Insgesamt also drei Cronjobs für Sperren, Meldung, Update, Backup und Freischalten!

                      Kommentar

                      Lädt...
                      X