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

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

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

  1. bool query_thread(const char* cmd, MYSQL* con) {
  2. if( !query( cmd, con ) ) {
  3. return 0;
  4. }
  5. return 1;
  6. }
  7. int main() {
  8. ........
  9. if(mysql_query(m_con, "CREATE TABLE tb1 (model INT(32), handle INT(32))") != 0) {
  10. return 0;
  11. }
  12. thread thread1(query_thread, "INSERT INTO tb1 VALUES (1,1)", m_con);
  13. thread thread2(query_thread, "INSERT INTO tb1 VALUES (2,2)", m_con);
  14. thread thread3(query_thread, "INSERT INTO tb1 VALUES (3,3)", m_con);
  15. thread1.join();
  16. thread2.join();
  17. thread3.join();
  18. }

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

daupos2t

daupos2t1#

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

相关问题