CSV Datei Serverschonen in Datenbank auslesen

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

  • CSV Datei Serverschonen in Datenbank auslesen

    Ich dachte mir das es wohl das schonendste sein dürfe dies über Ajax zu machen!?

    Was denk ihr?

    Vorweg nein über MYPHP Admin ist keine Lösung, da es automatisiert passieren muss!


    Sinn und zweck ist es jeden 2-3 Tag eine etwa 100 MB grosse CSV zu downloaden (als zip) und in eine Mysql Datenbank zu übertragen Upzudaten

    Lange Rede kurze Sinn.

    Ich will hier keine fertigen Lösungen sonder ansätze wie man das Serverschonend Lösen kann.

    Herausuchen kann ich mir die Funktione auch, nur bin ich bisher nur auf Lösungen gekommen die den Server enorm belasten.

    THX für eure Hilfe.

  • #2
    über nen cronjob nachts laufen lassen, wenn wenig last auf dem server ist
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      die update laufen eh nachts übern cronjob.


      Mir geht es vielmehr darum die Routine so laufen zu lassen das, dass update zwar länger dauert aber den server nicht belastet.
      Also sozusagen ein limit einzubauen.

      Da ist mir nur noch nichts eingefallen.


      Hier ist ein ganz guter Ansatz:
      Der aber leider eben den Server bei grossen Dateien ziemlich belastet.

      http://www.abakus-internet-marketing...c/t-36300.html

      PHP-Code:
      $trenner ";";
      $datei fopen($dateiname,"r");
      $db mysql_connect("localhost",trim($dbuser),trim($dbpass)) or die ("Verbindung zur Datenbank nicht möglich");
      mysql_select_db(trim($datenbank));

      $test mysql_list_fields(trim($datenbank), trim($dbtabelle));
      $spalten mysql_num_fields($test);

      while(!
      feof($datei)){
      $zeile fgets($datei,4000);
      $daten explode($trenner,$zeile);


      $dbquery1 "INSERT INTO ".$dbtabelle." VALUES (";
      $dbquery2 "";
      $dbquery3 ")";
      for (
      $i 0;$i $spalten;$i++){
      $daten1 str_replace(',','.',$daten[$i]); // Kommas durch Punkte ersetzen
      $dbquery2 $dbquery2."'".chop($daten1)."', ";
       
      }
      $dbquery2 substr($dbquery2,0,-2);
      echo 
      $dbquery1.$dbquery2.$dbquery3.$dbquery4 "<br>";
      $dbq mysql_query($dbquery1.$dbquery2.$dbquery3);

      Kommentar


      • #4
        zum einen frage ich mich, wiese die csv datei so groß ist. Aber ok, da kannst du ja nichts für.

        Ansonsten mach dich mal darüber schlau, dass man in einen query auch mehrere datensätze inserten kann. Darüberhinaus kannst du zwischendurch auch immer mal ein sleep einbauen.
        [FONT="Helvetica"]twitter.com/unset[/FONT]

        Shitstorm Podcast – Wöchentliches Auskotzen

        Kommentar


        • #5
          Nur der Vollständigkeit halber, weil du direkt im ersten Satz AJAX erwähnst:

          Für jeden Pup nen neuen Request zu machen, ist natürlich NICHT serverschonend. ,)

          Kommentar


          • #6
            THX Das Sleep!

            Klingt Erfolgsversprechend!

            Kommentar


            • #7
              Ajax ist generell eh nicht serverschonend....

              Nur weil man bei der Eingabe gleich servertechnisch prüfen kann ob der Benutzername o.Ä. vergeben wurde, muss man das noch lange nicht tun.

              Wegen jedem Quatsch gleich den Server zu nötigen halte ich nicht für sinnig....

              Man kann zu 2/3 auf Ajax verzichten

              BTW: Persönlich noch nie verwendet aber soweit ich weiss ist
              LOAD DATA INFILE die schnellste Möglichkeit eine Textdatei in eine Table einzulesen... Weiss allerdings im Moment nicht wie hoch der Aufwand dafür ist...da die File bestimmt auch bestimmten einheitlichen Konventionen unterworfen werden müsste

              Ansonsten musst du wie bereits erwähnt ein Insert Statement bauen wo du sämtliche Daten via values(),(),().... reinschiebst
              Zuletzt geändert von Payne_of_Death; 18.09.2008, 16:56.
              [color=blue]MfG Payne_of_Death[/color]

              [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
              [color=red]Merke:[/color]
              [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

              Murphy`s Importanst LAWS
              Jede Lösung bringt nur neue Probleme
              Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
              In jedem kleinen Problem steckt ein großes, das gern raus moechte.

              Kommentar


              • #8
                Hm.
                Ist es denn so schlimm, wenn der Server nachts mal 5-10 Minuten unter Vollast läuft?
                Ist das Last vermeiden wirklich nötig, oder soll der Provider keinen Streß machen?

                Kommentar


                • #9
                  Jeder, der Dienste im Netz anbietet, hat ein Wartungsfenster. Sowas würde da rein fallen. Und ich kenne Unternehmen, die jede Nacht von 1-4 Wartungen vornehmen (könnten) ... das ist also nicht soo abwegig.

                  Aber: Wenn dein Service eine so hohe Erreichbarkeit braucht, dann frage ich mich, warum du nicht replizierst oder clusterst?! Und warum die Datenbank offensichtlich auf der selben Maschine rennt?!
                  [FONT="Helvetica"]twitter.com/unset[/FONT]

                  Shitstorm Podcast – Wöchentliches Auskotzen

                  Kommentar

                  Lädt...
                  X