我在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