ich eine Anwendung in c haben ++ und ich bin mit der C++ MySQL Connector (https://dev.mysql.com/downloads/connector/cpp/)C++ in Legen Sie MySQL-Datenbank
Ich brauche einige Protokolle innerhalb eines table.Depending auf die Zeiten speichern ich große Mengen haben Daten in der Größenordnung von Tausenden (z. B. 80.000).
Ich implementiere bereits eine Funktion, die meine std::vector<std::string>
iterieren und die std::string
in meiner Datenbank speichern.
Zum Beispiel:
std::vector<std::string> lines = explode(filedata, '\n');
for (int i = 0; i < lines.size(); i++)
{
std::vector<std::string> elements = explode(lines[i], ';');
ui64 timestamp = strtol(elements.at(0).c_str(), 0, 10);
std::string pointId = elements.at(6);
std::string pointName = elements.at(5);
std::string data = elements.at(3);
database->SetLogs(timestamp, pointId, pointName, data);
}
Die Protokolle kommen aus CSV-Datei, ich alle Felder meines Vektor speichern. Danach analysiere ich den Vektor (mit explode) und bekomme nur die Felder, die ich speichern muss.
Aber ich habe ein Problem. Wenn ich z. B. 80.000 habe, rufe ich meine Funktion auf, in Datenbank 80.000 zu speichern. Es funktioniert und speichert alle Daten korrekt, aber es braucht viel Zeit.
Existiert eine Möglichkeit, alle Daten nur einmal aufrufen die Funktion zu speichern, ohne z. B. 80.000 zu speichern und damit die Zeit zu optimieren?
EDIT 1
ich den Einsatz ändern Sie diesen Code auf:
std::string insertLog = "INSERT INTO Logs (timestamp,pointId,pointName,data) VALUES (?,?,?,?)";
pstmt->setString(1, timestampString);
pstmt->setString(2, pointId);
pstmt->setString(3, pointName);
pstmt->setString(4, data);
pstmt->executeUpdate();
Wenn der Code, den Sie haben, richtig funktioniert, und Sie nur die Leistung verbessern möchten: [codereview.stackexchange.com] (https://codereview.stackexchange.com/) ist besser, um solche Fragen zu stellen. –
vielleicht suchen Sie für Gebäude Einfügen https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html – sam