Hallo Zusammen.
Ich bin ganz neu hier und ich hoffe ihr könnt mir Helfen
Ich möchte Daten die ich habe (*.nq-Dateien) in MySQL importieren.
Die Daten liegen im NQuads-Format vor und enthalten somit keine SQL-Insert-Statements, der mysqlimport-Befehl funktioniert daher nicht.
Ich habe mir ein Java-Programm geschrieben, dass diese nq-Dateien parst (Zerlegung in einfache Token) und mittels prepared-Statement in die DB schreibt.
Das Importieren von 5GB Daten dauert bei mir knapp über 2 Stunden
Die DB wird nur lokal und somit von nur einem Benutzer genutzt. Ich verwende eine MyISAM und eine InnoDB Tabelle in die ich dieselben Daten schreibe.
Der Flaschenhals in meinem Java-Programm ist die "execute()"-Anweisung des Prepared Statements. Wenn ich diese Anweisung auskommentiere benötigt das Programm knapp 1 Minute für die Ausführung.
Ich suche nun nach einer Möglichkeit diese Daten möglichst schnell in die DB zu pumpen.
Hier meine Tabellen:
CREATE TABLE dbpedia_innodb (
line INT NOT NULL AUTO_INCREMENT ,
one VARCHAR(4000) NULL ,
two VARCHAR(4000) NULL ,
three LONGTEXT NULL ,
four VARCHAR(4000) NULL ,
PRIMARY KEY (line) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE TABLE dbpedia_myisam (
line INT NOT NULL AUTO_INCREMENT ,
one VARCHAR(4000) NULL ,
two VARCHAR(4000) NULL ,
three LONGTEXT NULL ,
four VARCHAR(4000) NULL ,
PRIMARY KEY (line) )
ENGINE = MyISAM
DEFAULT CHARACTER SET = latin1;
Kann mir jemand sagen, wie ich die Daten möglichst schnell importiere? Welche Parameter muss ich setzen?
Ich arbeite unter Linux mit MySQL 5.5. Während des Importvorgangs schaue ich mir mittels "iotop" die Festplattenauslastung an und sehe, dass lediglich nur ein paar MB/s oder teilweise nur KB/s in vom mysqld-Prozess geschrieben werden (Festplatte ist aber in Ordnung und schafft rund 90MB/s im Durschnitt). Die CPU-Auslastung liegt bei etwa 50%. Was bremst den Import hier so gewaltig? Ach ja: ich mache etwa alle 8000 Tupel einen Commit. Ist das bei MyISAM überhaupt notwendig?
Vielen Dank das Ihr euch Zeit für mich nehmt!
EDIT:
Das prepared Statement besteht lediglich aus einem simplen "insert into tabelle(one, two,three) values (?,?,?)" also keine komplexe Anfrage.
Ich bin ganz neu hier und ich hoffe ihr könnt mir Helfen
Ich möchte Daten die ich habe (*.nq-Dateien) in MySQL importieren.
Die Daten liegen im NQuads-Format vor und enthalten somit keine SQL-Insert-Statements, der mysqlimport-Befehl funktioniert daher nicht.
Ich habe mir ein Java-Programm geschrieben, dass diese nq-Dateien parst (Zerlegung in einfache Token) und mittels prepared-Statement in die DB schreibt.
Das Importieren von 5GB Daten dauert bei mir knapp über 2 Stunden
Die DB wird nur lokal und somit von nur einem Benutzer genutzt. Ich verwende eine MyISAM und eine InnoDB Tabelle in die ich dieselben Daten schreibe.
Der Flaschenhals in meinem Java-Programm ist die "execute()"-Anweisung des Prepared Statements. Wenn ich diese Anweisung auskommentiere benötigt das Programm knapp 1 Minute für die Ausführung.
Ich suche nun nach einer Möglichkeit diese Daten möglichst schnell in die DB zu pumpen.
Hier meine Tabellen:
CREATE TABLE dbpedia_innodb (
line INT NOT NULL AUTO_INCREMENT ,
one VARCHAR(4000) NULL ,
two VARCHAR(4000) NULL ,
three LONGTEXT NULL ,
four VARCHAR(4000) NULL ,
PRIMARY KEY (line) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = latin1;
CREATE TABLE dbpedia_myisam (
line INT NOT NULL AUTO_INCREMENT ,
one VARCHAR(4000) NULL ,
two VARCHAR(4000) NULL ,
three LONGTEXT NULL ,
four VARCHAR(4000) NULL ,
PRIMARY KEY (line) )
ENGINE = MyISAM
DEFAULT CHARACTER SET = latin1;
Kann mir jemand sagen, wie ich die Daten möglichst schnell importiere? Welche Parameter muss ich setzen?
Ich arbeite unter Linux mit MySQL 5.5. Während des Importvorgangs schaue ich mir mittels "iotop" die Festplattenauslastung an und sehe, dass lediglich nur ein paar MB/s oder teilweise nur KB/s in vom mysqld-Prozess geschrieben werden (Festplatte ist aber in Ordnung und schafft rund 90MB/s im Durschnitt). Die CPU-Auslastung liegt bei etwa 50%. Was bremst den Import hier so gewaltig? Ach ja: ich mache etwa alle 8000 Tupel einen Commit. Ist das bei MyISAM überhaupt notwendig?
Vielen Dank das Ihr euch Zeit für mich nehmt!
EDIT:
Das prepared Statement besteht lediglich aus einem simplen "insert into tabelle(one, two,three) values (?,?,?)" also keine komplexe Anfrage.