Ankündigung

Einklappen
Keine Ankündigung bisher.

6Mio Codes formatieren

Einklappen

Neue Werbung 2019

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

  • 6Mio Codes formatieren

    Guten Abend

    Ich habe eine txt.Liste mit 6 Mio Codes im folgenden Format:

    000S8U:=)f6
    000pkkI:=)z
    000e1:=)HQp
    0000dVg:=)M
    0003o:=)I23
    000nSDr:=)A
    000q:=)a2GK

    Ich muss einen Weg finden wie ich die 6 Mio codes in eine SQL DB bringe um eine Vergleichsfunktion zu schreiben.

    1.Problem wie kriege ich die Codes Formatiert (separator am Zeilenende)
    Ich habe probiert mit SublimeText3 die 6Mio Zeilen zu markieren, ans Ende jeder Zeile zu springen und den Separator (;;,||) einzufügen... Leider ohne Erfolg Sublime stribt schon beim markieren der 6Mio Zeilen.

    2.Problem Upload in SQL Datenbank? Wie löse ich das am besten? SQL Server lokal hosten mit Xamp? CSV in aufsplitten und gescriptet uploaden?

    Besten Dank für eure Inputs... Gruss


  • #2
    1. explode()
    2. prepared statement, zeilenweise einlesen und ab gehts sollte wohl die ganze csv ohne Probleme schaffen.
    GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

    Kommentar


    • #3
      Zitat von ChristianK Beitrag anzeigen
      1. explode()
      2. prepared statement, zeilenweise einlesen und ab gehts sollte wohl die ganze csv ohne Probleme schaffen.
      Man könnte es natürlich auch einfacher machen, unter PG via COPY und in MyZettelkasten via LOAD DATA. Aber das wäre sowohl zu einfach als auch zu schnell.
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Eben. Und gerade Textfiles kann man auch super aufsplitten.
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Lade die Datei doch via file() die Datei und speichere dann die Codes via foreach() in der Datenbank.

          Könnte blos etwas länger dauern bei 6mio codes.
          https://github.com/Ma27
          Javascript Logic is funny:
          [] + [] => "", [] + {} => object, {} + [] => 0, {} + {} => NaN

          Kommentar


          • #6
            Klar, ein Array mit 6 Millionen Einträgen. Da freut sich PHP sicher, endlich mal was zu tun zu haben
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              "LOAD DATA" ist schon der perfekte Weg

              Alternativ mit PHP ganz viele Insertstatements bauen und die dann mit cmd-tools deiner DB importieren
              Standards - Best Practices - AwesomePHP - Guideline für WebApps

              Kommentar


              • #8
                Zitat von Ma27 Beitrag anzeigen
                Lade die Datei doch via file() die Datei und speichere dann die Codes via foreach() in der Datenbank.
                Vielen Dank für eine weitere unnötig komplexe Lösung. Ich warte jetzt noch auf eine Integration von Powerpoint in den Prozess. Freiwillige vor!
                PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                Kommentar


                • #9
                  Excel wäre noch...
                  Standards - Best Practices - AwesomePHP - Guideline für WebApps

                  Kommentar


                  • #10
                    Nur weil LOAD DATA dafür gemacht ist, wieso dann nutzen?
                    komme grad nicht so gut mit powerpoint klar, sorry, arbeite noch an einer lösung.


                    //offtopic:
                    also shell:
                    Code:
                    for v in `cat datei.txt`;
                        do
                         mysql -h localhost -u user --password=passwd -D testCodeDB -e "insert into codes (code) values ('$v');";
                    done;
                    ist aber auch für die tonne, da ja ca 6 mio connects zu db aufgebaut werden.
                    nun kennt die mysql console ja system, um ne shell auszuführen, aber damit krieg ich die schleife nicht hin, des semikolons wohl wegen.
                    zudem krieg ich das insert into nicht in die schleife.

                    wenn also jemand lust hat, kann er mir durchaus meine denkfehler aufzeigen.

                    Kommentar


                    • #11
                      Hallo Leute

                      Besten Dank für eure tollen Inputs, ich habe mittlerweile ein kleines Script geschrieben welches den ersten Teil der Aufgabe fast richtig macht.

                      Warum ist der Seperator am Anfang und nicht am Ende des Strings?

                      PHP-Code:
                      <?php 
                      //open input file
                      $input_file fopen("codes_input.txt""r");

                      //if pointer is not at file-end
                      while (!feof($input_file)) {
                          
                          
                      //create variable with file content
                          
                      $file_content fgets($input_file);

                          
                      //explode content string into array
                          
                      $content_array = (explode(" ",$file_content));    

                          
                      //run foreach loop for each array-element
                          
                      foreach ($content_array as $element) {

                              
                      //open output file
                              
                      $output_file fopen("codes_output.txt","a");

                              
                      //create new element and add seperator
                              
                      $new_element $element ." , ";

                              
                      //store ne element in output file
                              
                      fwrite($output_file$new_element);
                          }
                          
                      //close output file
                          
                      fclose($output_file);

                      }
                      //close input file
                      fclose($input_file);
                      ?>
                      Output in der Datei:

                      , 000:=)O22WW
                      , 000:=)w3ANq
                      , 000:=)xd7vf
                      , 000A:=)tmli


                      Gruss

                      Kommentar


                      • #12
                        Zitat von rkr Beitrag anzeigen
                        "LOAD DATA" ist schon der perfekte Weg

                        Alternativ mit PHP ganz viele Insertstatements bauen und die dann mit cmd-tools deiner DB importieren
                        Wieso solltest du INSERTs bauen? Dann kannst du die Queries ja gleich auch mit PHP abfeuern...
                        GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

                        Kommentar


                        • #13
                          Und warum willst du umbedingt ein Seperator an die Zeilen hängen. Theoretisch ist doch schon einer da "\n", oder irre ich da?

                          Kommentar


                          • #14
                            Zitat von Kinger Beitrag anzeigen
                            Und warum willst du umbedingt ein Seperator an die Zeilen hängen. Theoretisch ist doch schon einer da "\n", oder irre ich da?
                            Hmm also im TXT werden die Codes untereinander dargestellt, das ist richtig. Ich dachte, dass ich den Seperator benötige um die Codes in die SQL Tabelle zu laden.

                            Bitte korrigiert mich, falls ich mich irre.

                            Gruss

                            (p.s danke für das tolle feedback)

                            Kommentar


                            • #15
                              Ich hab folgendes im Netz gefunden (tutorials.de):

                              PHP-Code:
                              $maxRecords 1000;
                              $queryPattern 'INSERT INTO xxx (`md5`) VALUES ';
                              $values = array();
                               
                              $handle fopen($path'r');
                              while( !
                              feof($handle) && $i++ ) {
                                  
                              $array[] = md5(trim(fgets($handle)));
                                  if( 
                              $i >= $chunkSize ) {
                                      
                              $query $queryPattern '("'.implode('"),("'$array).'")';
                                      
                              mysql_query($query);
                                      
                              $array = array();
                                      
                              $i 0;
                                  }

                              1000 Einträge pro Query. Das geht doch, oder?

                              Kommentar

                              Lädt...
                              X