我在C一個應用++和我使用的是C++ MySQL連接(https://dev.mysql.com/downloads/connector/cpp/)c + +插入到MySQL數據庫
我需要保存一個table.Depending裏面的一些日誌的時候,我可能有大量的數據量爲數千(例如80,000)。
我已經實現了一個迭代我的std::vector<std::string>
並將std::string
保存到我的數據庫的函數。
例如:
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);
}
日誌來自csv文件,我的所有字段保存到我的向量。在此之後,我解析矢量(爆炸),並只得到我需要保存的字段。
但我有一個問題。如果我有例如80,000我打電話給我的函數保存在數據庫80,000。它可以正常工作並保存所有數據,但需要很長時間。
存在某種方式來保存所有數據只調用一次保存功能,而不調用例如80,000,從而優化時間?
編輯1
我改變插入的代碼如下:
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();
如果您的代碼正常工作,並且您只想提高性能:[codereview.stackexchange.com](https://codereview.stackexchange.com/)是更好的地方提出這樣的問題。 –
也許您正在尋找builk插件https://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb-bulk-data-loading.html – sam