在C ++中通过多线程将数据同时插入到单个MySQL表中

特德

我正在做一个通过多线程同时将数据插入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错误消息。

错误cmd:插入tb1值(1,1)

查询期间失去与MySQL服务器的连接

分段故障

我的问题如下。

  1. 是因为MySQL无法接受并发插入吗?还是不好用多线程。
  2. 通过如上所述的多线程插入,是否有助于加速程序?我知道最好的方法是每个查询和LOAD DATA INFILE多次插入。但是我只想知道这种方式是否可以帮助您。
迪玛·蒂斯内克(Dima Tisnek)

每个线程必须具有:

  • 自己的数据库连接
  • 自己交易
  • 自己的游标

但是,这不会使插入速度更快。简而言之,innodb日志(日志)本质上是串行的,这限制了服务器的总插入率。阅读mysql性能博客(percona / mariadb)了解详细信息。当然,有一些参数需要调整,并且最近似乎有所进步。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章