C++/MySQL,在 1 次执行中插入 200 个数据点数组

标签 c++ mysql arrays logging

我是 C++ 和 MySQL 方面的新手,所以如果答案相对简单,我先向您道歉,但到目前为止我找不到任何(有效的)解决方案,尽管我知道肯定有。

我正在尝试将传感器中的数据记录到 Raspberry 上的本地主机 MySQL 数据库中。为了保持良好的性能,应该在一次执行中将多个数据点写入 SQL 数据库。目前我正在使用这种方法每秒 50 个信号点:

{
        i = 0;
        j = 1;
        k = 1;

        /* Creating pstmt statement*/
        pstmt = con->prepareStatement("INSERT INTO signal_" +day+ "_" +month+ "_" +year+ "(id, signal) VALUES (?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?),(?, ?)");

        /* Inserting 50 values */
        while (i < 50)
        {
            /* Insert ID integer (j = location, index[i]) */
            pstmt->setInt(j, index[i]);
            k = j + 1;

            /* Insert signal integer (k = location, signal[i]) */
            pstmt->setInt(k, signal[i]);
            j = j + 2;
            i++;
        }

        /* Execute pstmt using set values */
        pstmt->execute();
    }

*当第一个数组写入 SQL 时,第二个数组将被填满,然后第二个数组将被写入 SQL,第一个数组将再次被填满。

此示例适用于单个数据点和索引,但如果我想将数据扩展到 200 点/秒并包含时间戳,它将变得非常困惑。

所以我的问题是:有没有一种简单的方法可以一次性将整个数组插入 MySQL 数据库? (如果性能足够好但至少 50/秒,最终目标将是一个 10 列和 200 行/秒的数组)

最佳答案

经过适当的研究,我找到了一种将数组插入 MySQL 的方法:

void log_the_data()

int i ;
string query, insert;
for (i=0 ; i < 50 ; i++)
{
    fprintf(f_log,"%ld %d %s %ld%s\n",nr_pts++,data[i],t_string,packet_counter,s_status);
    stringstream ss;
    ss << "(" << nr_pts << "," << data[i] << ",'" << t_string << "'),";
    insert = ss.str();
    query += insert;
}
query.erase (query.end()-1);

pstmt = con->prepareStatement("INSERT INTO test(id, signal, time) VALUES " +query+ "");
pstmt->execute();
fflush(f_log) ;
clear_my_buffer() ;

这会在 1 次执行中插入 50 行并且可以轻松扩展

如果这不是正确的方法,请纠正我

关于C++/MySQL,在 1 次执行中插入 200 个数据点数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29108258/

相关文章:

c++ - 模板变量特化(针对模板模板类)

C++ Lua(对象表的表)

c++ - 模板特化不满足我的需要

mysql - 是否可以在 information_schema 中的任何表上应用触发器?

c# - 初始化静态数组的正确语法

c++ - 如何制作指针迭代器?

mysql - 选择 while 而不是 While select 导致问题

mysql - 您将如何将这些用户计划存储在数据库中?

Python - 在字典中使用 numpy 数组作为键的替代方法

php一次将数据插入具有多个ID的数据库?