c语言中多线程并发向单个mysql表插入数据++

ui7jx7zq  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(429)

我正在做一个实验,通过多线程将数据同时插入mysql表。
下面是c++中的部分代码。

bool query_thread(const char* cmd, MYSQL* con) {
      if( !query( cmd, con ) ) {
        return 0;
      }
      return 1;
    }
    int main() {
          ........
      if(mysql_query(m_con, "CREATE TABLE tb1 (model INT(32), handle INT(32))") != 0) {
        return 0;
      }

      thread thread1(query_thread, "INSERT INTO tb1 VALUES (1,1)", m_con);
      thread thread2(query_thread, "INSERT INTO tb1 VALUES (2,2)", m_con);
      thread thread3(query_thread, "INSERT INTO tb1 VALUES (3,3)", m_con);
      thread1.join();
      thread2.join();
      thread3.join();
    }

但是mysql错误消息已经发出。
error cmd:插入tb1值(1,1)
查询期间与mysql服务器失去连接
分段故障
我的问题如下。
是因为mysql不能同时接受插入吗?或者多线程使用不当。
通过如上所述的多线程插入,是否有助于加速程序?我知道最好的方法是每个查询多个插入和加载数据填充。但我只想知道这种方法是否有用。

lyr7nygr

lyr7nygr1#

每个线程必须具有:
自己的数据库连接
自有交易
自己的光标
但是,这不会使插入速度快得多。简而言之,innodb日志(journal)本质上是串行的,这限制了服务器的总插入速率。阅读mysql性能博客(percona/mariadb)了解详细信息。当然,有一些参数需要调整,而且最近似乎有了一些进展。

相关问题