使用dbms_pipe插入来自繁重事务的数据

时间:2013-09-08 04:11:36

标签: c++ mysql sql

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

我从c ++ envioronment访问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. 有人可以向我展示一些实施或参考吗?

1 个答案:

答案 0 :(得分:1)

可考虑的方法:

  1. 以分隔格式(例如逗号或制表符分隔)累积本地文件中传入数据的相应部分(取决于频率)
  2. 偶尔启动一个新文件并使用LOAD DATA LOCAL INFILE将前一个文件加载到数据库中。它是在MySql中加载批量数据的最快方式。
  3. 成功加载后删除文件
  4. 如果由于某种原因你不能使用文件进行缓冲,至少使用多插入语法

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

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

    另请查看 Speed of INSERT Statements

      

    要优化插入速度,请将许多小型操作合并为一个   大手术。 理想情况下,您进行单一连接,发送数据   对于许多新行,同时延迟所有索引更新和一致性   检查直到最后。

         

    插入行所需的时间由以下确定   因素,数字表示大致比例:

         

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