0

我有一个应用程序,其中数据非常频繁。数据是 string[word] 和 int 值,我将其插入数据库以进行进一步处理。我正在使用 mysql C++ 连接。

我正在从 C++ 环境访问 mysql。最初我想为每个传入的数据调用插入查询并插入数据库。然后得到建议,当数据插入频率非常高时,对每个这样的插入进行查询将变得非常昂贵且不合适。

我得到了使用建议dbms_pile。我以前没有使用过它,我阅读了文档并了解了这个概念。

我认为这个功能:Triggers and stored procedures can send debugging information to a pipe. Another session can keep reading out of the pipe and display it on the screen or write it to a file这个功能足以满足我的要求,对吧?而是将其写入文件,我可以在不显示的情况下插入数据库。参考:Dbms_pipe

  1. 够了吗?
  2. 会有什么不同吗?
  3. 有人可以给我看一些实现或参考吗?
4

1 回答 1

1

一种可能的考虑方法:

  1. 以分隔形式(例如逗号或制表符分隔)在本地文件中累积传入数据的适当部分(取决于频率)
  2. 偶尔启动一个新文件并将前一个文件加载到数据库中LOAD DATA LOCAL INFILE。这是在MySql中加载批量数据的最快方法。
  3. 加载成功后删除文件

如果由于某种原因您不能使用文件进行缓冲,至少使用多插入语法

INSERT INTO table_name (col1, col2,...) 
VALUES (value1, value2, ...),(value3, value4,...),...

为一批数据构建一个查询字符串,然后立即执行。

另请查看插入语句的速度

为了优化插入速度,将许多小操作组合成一个大操作。理想情况下,您建立一个连接,一次发送许多新行的数据,并将所有索引更新和一致性检查延迟到最后。

插入一行所需的时间由以下因素决定,其中数字表示近似比例:

连接:(3)
向服务器发送查询:(2)
解析查询:(2)
插入行:(1×行大小)
插入索引:(1×索引数)
关闭:(1)

于 2013-09-08T05:30:25.937 回答