tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
10
ZUGRIFFE
725
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    gondor gondor ist offline Mitglied Silber
    Registriert seit
    Jul 2004
    Beiträge
    65
    hallo liebe community!

    leider habe ich ein schwerwiegendes problem:

    ich habe eine ca. 30MB große datei, die messdaten in dieser form:

    35.000 23.212 20.019 23.945 20.996 22.724 20.019
    36.000 23.212 20.019 23.701 20.996 22.724 20.263
    37.000 23.457 20.019 23.701 20.996 22.724 20.507
    ...

    (mehr als >70.000 zeilen)

    enthält. dabei steht die erste spalte für die zeit der messung (sec) und die restlichen sind die dazugehörigen temperaturmesswerte (°C). soweit alles noch in ordnung.

    diese werte möchte ich zur weiterverarbeitung gerne in eine mysql-db speichern.

    da ich noch nie in einer solchen dimension programmiert bzw. zu tun hatte, verzweifel ich schon überhaupt an die mächtige größe des files (da diese via fread und ähnlichen einfach nicht einzulesen is)t. des weiteren ist die frage, wie ich am besten einlesen soll damit die werte auch ordentlich in meine db gespeichert werden, und wie müßte überhaupt gespeichert werden?

    oder kann das txt-file 'direkt' in eine db importiert werden? (leider kann excel aufgrund der vielen zeilen nicht alles darstellen, wenn ich die txt mit excel öffne)

    es bleibt mir zurzeit nichts anderes übrig ein paar user-meinungen (evtl auch von erfahrenen programmieren) zu sammeln, die in mein vorhaben etwas zeit investieren und eine realisierung mit mir ermöglichen können. vllt. ist einfach mein ansatz schlecht, meine architektur oder muss ich mit anderen programmiersprachen vorlieb nehmen? gibt es beispiele oder ähnliche quellen...?

    ist wirklich drigent, da ich dieses für eine wissenschaftliche ausarbeitung benötige.

    hab keinen rat mehr... plz help

    gondor(..)
    Geändert von gondor (27.07.04 um 18:01 Uhr)
     

  2. #2
    MiLa MiLa ist offline Mitglied Smaragd
    Registriert seit
    Aug 2003
    Beiträge
    1.166
    Musst du diesen Prozess regelmäßig so großen Dateien durchführen?

    Wenn nicht, würde ich empfehlen, die Datei manuell zu verkleinern...
    Anschließend benutzt du fread um die Datei zeilenweise auszulesen, dann kannst du die Daten ganz normal in die Datenbank eintragen

    Du kannst die Konfiguration des Webservers auch so anpassen, dass es möglich ist solch eine große Datei auszulesen.
     

  3. #3
    gondor gondor ist offline Mitglied Silber
    Registriert seit
    Jul 2004
    Beiträge
    65
    @lars

    danke für deine schnelle antwort.

    der prozess muss (bis jetzt) schon öfters wiederholt werden.

    zur messung:

    dabei handelt es sich um messungen die vielleicht 2-3 tage durchlaufen könnten, was natürlich immens hohe daten bedeutet (bei jeder sec ein eintrag...). mir wäre es natürlich auch lieber weniger daten zu haben (hatte es mit ca. 2MB ausprobiert *schwärm*) aber manuelle bearbeitung bedeutet bei >70.000 zeilen ziemlichen mehraufwand.

    evtl. gibt es ein scrip, dass automatisch die files splitted, da mehrere messungen in dem file stattfinden:

    0.000 | 23.212 | 20.019 | 23.945 | 20.996 | 22.724 | 20.019 <- 1. messung
    1.000 | 23.212 | 20.019 | 23.701 | 20.996 | 22.724 | 20.263
    2.000 | 23.457 | 20.019 | 23.701 | 20.996 | 22.724 | 20.507
    3.000 | 23.457 | 20.019 | 23.701 | 20.996 | 22.724 | 20.507
    ...
    22.507.000 | -16.826 | 86.914 | -10.478 | 84.937 | -19.432 | 83.654
    ...
    0.000 | 23.212 | 20.019 | 23.945 | 20.996 | 22.724 | 20.019 <- 2. messung

    ...und mit den zeitwert 0.000 wieder anfangen.

    was meinst du denn mit der konfiguration des webservers? wäre das eine brauchbare lösung?

    ansonsten für jeden tipp dankbar
    Geändert von gondor (27.07.04 um 18:36 Uhr)
     

  4. #4
    vop vop ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Beiträge
    676
    Hi, bin zwar kein PHP-Experte, aber wiese geht es nicht mit fread?

    Verwendest du fread mit dynamischen Speicher in einer Schleife, dann kannst Du doch beliebig große (oder kleine) Häppchen am Stück einlesen, diese auswerten (Sql-Anweisungen dazu erstellen) und dann den nächsten Happen nehmen.

    Wo genau scheitert fread?

    Wie es Performance-mäßig aussieht, kann ich Dir nicht sagen. Aber 70000 Zeilen sind doch eigentlich kein Problem, oder?

    Ansonsten evtl. noch ein Tipp (für Linux)
    split -l 1000 Dateiname
    Teilt eine Datei in EinzelDateien zu je 1000 Zeilen auf.
    Split müßte es auch irgendwie für Windows geben.

    vop
     

  5. #5
    gondor gondor ist offline Mitglied Silber
    Registriert seit
    Jul 2004
    Beiträge
    65
    @vop

    dachte ich´s mir doch. hier wird man nicht allein gelassen

    wie meinst du in häppchen? kann man evtl. in blöcke einlesen? das ist natürlich eine überlegung, die ich noch gar nicht angestellt habe. da ich morgen wieder am rechner sitze, teile ich meine erfahrungen natürlich gleich mit.

    wie stark 'performance-abhängig' ist denn das ganze?

    zu den zeilen. es sind bestimmt >300.000 zeilen.

    <edit> so hab mal nachgeschaut: eine datei hat ca. 235.000 zeilen </edit>

    also, mehr gibt es morgen zu berichten...

    danke für den bisherige 'gehirnschmalz'
    Geändert von gondor (27.07.04 um 21:14 Uhr)
     

  6. #6
    German German ist offline Mitglied Brokat
    Registriert seit
    Jul 2004
    Ort
    (Bayern)
    Beiträge
    464
    Original geschrieben von gondor
    oder kann das txt-file 'direkt' in eine db importiert werden?
    Hi,

    das sollte doch mit phpMyAdmin funktionieren, dort kannst Du als Feldtrenner ein Leerzeichen angeben und direkt die .txt einlesen.

    70.000 Zeilen á 7 floats sollten kein Problem sein.
     
    Gruß German

  7. #7
    MiLa MiLa ist offline Mitglied Smaragd
    Registriert seit
    Aug 2003
    Beiträge
    1.166
    Mit der Konfiguration des Webservers meinte ich die zulässige Laufzeit, die ein Script haben darf.
    Wenn diese Laufzeit überschritten wird, wird der Prozess automatisch "gekillt".

    Ich hätte es jetzt einfach so versucht:
    In einer Schleife wird das Script zeilenweise ausgelesen, die Daten aus der aktuellen Zeile werden dann in die Datenbank eingetragen, dann läuft die Schleife jede einzelne Zeile durch und fertig ist der Salat

    Hi,

    das sollte doch mit phpMyAdmin funktionieren, dort kannst Du als Feldtrenner ein Leerzeichen angeben und direkt die .txt einlesen.

    70.000 Zeilen á 7 floats sollten kein Problem sein.
    Geht das echt? Leerzeichen als Trennzeichen angeben? Habe ich noch nie gemacht...aber wäre ja ne Möglichkeit...
     

  8. #8
    Skinner Skinner ist offline Mitglied Silber
    Registriert seit
    Apr 2004
    Beiträge
    54
    Es ist jetzt nur die Frage: Wenn das Programm in C++ ist könnte er ja eigentlich gleich über das Programm die Einträge in die Db machen oder automatisch nach einer gewissen Zeit ein neues File anfangen.
     

  9. #9
    Registriert seit
    Apr 2002
    Ort
    Ingolstadt
    Beiträge
    2.940
    Original geschrieben von gondor
    oder kann das txt-file 'direkt' in eine db importiert werden?
    hast du Zugriff auf MySQL von der Shell aus? Wenn ja, dann log dich ein und versuch mal
    Code :
    1
    2
    3
    
    mysql> LOAD DATA INFILE 'deineDatei.txt' INTO TABLE deineTbl(c1, c2, c3, c4)
        -> FIELDS TERMINATED BY ' '
        -> LINES TERMINATED BY '\r\n';
    mysql> und -> sollen den Mysql Promt darstellen, müssen also nicht mit eingegeben werden. \r\n stimmt nur wenn es sich um ein Textfile handelt, das in Windows erstellt wurde. Die (c1, c2, c3...) geben die Reihenfolge an, in welche Spalten geschrieben werden muss... also anstatt C1 usw einfach den konkreten Spaltennamen schreiben... Hoffe es funktioniert mit 30 MB files... ansonsten wie schon gesagt - das File Splitten in z.B. 10 * 3 MB Files - diese sollten dann leicht zu importieren sein... Natürlich wäre es besser wenn du direkt in die Datenbank schreiben könntest und nicht erst den Umweg über das Textfile gehen musst... Hast du das Messreihenprogramm selbst geschrieben, bzw kommst du an den Sourcecode? MySQL Bindings sollte es für nahezu jede Sprache geben...

    bye
    Geändert von Andreas Gaisbauer (28.07.04 um 11:21 Uhr)
     

  10. #10
    MiLa MiLa ist offline Mitglied Smaragd
    Registriert seit
    Aug 2003
    Beiträge
    1.166
    @Skinner:
    Ich denke mal, dass er den Schritt zu PHP nicht gemacht hätte, wenn er
    a) Das Programm das die Daten ausgibt umschreiben könnte
    b) Selbst wenn er die Möglichkeit hätte auch das Wissen hätte es in c++ umzuschreiben

     

  11. #11
    gondor gondor ist offline Mitglied Silber
    Registriert seit
    Jul 2004
    Beiträge
    65
    @Andreas Gaisbauer, German

    wow... das funktioniert ausgesprochen gut.

    Eingefügte Zeilen: 235936 (die Abfrage dauerte 9.2207 sek)

    die werte kommen aus LabView, die nach jeder messung lokal abgespeichert wird. ich denke, man könnte im programm viele parameter einstellen, die die art des abspeichern modifiziert und ggf. nicht so 'große' dateien entstehen läßt.

    leider liegt dieses nicht in meinen aufgabenbgebiet. ich bekomme die files und muss diese weiterverarbeiten.

    nochmals vielen dank für die hilfe!

    @all

    für weitere anregungen bin ich trotzdem dankbar.

    früher oder später werde ich bestimmt wieder an probleme stoßen, wo ich mit meinem wissen nicht weiterkommen werde (reine selbseinschätzung). doch die community läßt einen wissen, dass hier wirklich geholfen wird...

    gondor(..)
     

Ähnliche Themen

  1. Problem mit Daten importieren bei mysql
    Von ChichiU im Forum Relationale Datenbanksysteme
    Antworten: 1
    Letzter Beitrag: 05.10.07, 15:23
  2. Antworten: 42
    Letzter Beitrag: 04.09.07, 12:09
  3. Hilfe Habe Großes Problem MYSQL
    Von -GnP-Player im Forum Relationale Datenbanksysteme
    Antworten: 10
    Letzter Beitrag: 06.04.06, 13:20
  4. Problem mit Daten auslesen aus MySQL DB
    Von Mertex im Forum PHP
    Antworten: 2
    Letzter Beitrag: 06.12.04, 20:39
  5. daten in mysql db eintrage --> Problem!
    Von Brauni im Forum PHP
    Antworten: 12
    Letzter Beitrag: 11.08.02, 21:58