如何像写入常规文件一样写入 MYSQL 数据库

How can I write to MYSQL DB as if i were writing to a regular file

我想以与使用 ofstream 写入常规二进制文件相同的速度写入 MYSQL DB table。

通常情况下,使用 ofstream 向文件写入 100M 字节不到 1 秒。

而在MYSQL中,我插入这100M字节的时间超过9秒,时间非常长(我使用了MYISAM table和多行插入语句)。

换句话说,我想配置 mysql 使其不进行(检查、解析、....等),只是写入 table 就好像它是二进制文件一样文件

那么,有什么方法可以实现吗?

编辑 1:

这是我要填充的table,

create table Frames
(
f1 varchar(8) not null , 
f2 varchar(6) not null , 
f3 varchar(6) not null , 
f4 varchar(2) not null ,
f5 varchar(4),
f6 varchar(16000),
f7 varchar(4) not null
);

编辑 2:

这是用于插入的代码片段,其中 MAX 定义为 10000

for (int c = 0; c < 100; ++c)
{
  string query("insert into Frames (f1,f2,f3,f4,f5,f6,f7) values");
  for (int i = 1; i <= MAX; ++i)
  {
     query += "('AAAAAAAA','000001','000002','05','5005','000000000100000000010000000001000000000100','MKJE')";
     query += (i==MAX) ? ";" : "," ;
  }
  if (mysql_query(conn, query.c_str() )) {
     fprintf(stderr, "%s\n", mysql_error(conn));
     return(1);
  }
} 

谢谢

您应该尝试以下步骤,直到找到适合您的表现:

  1. 尝试LOAD DATA INFILE语句
  2. 试试 Nosql
  3. 假设您的 mysql 实例已正确调整,您别无选择,只能垂直扩展您的数据库服务器和网络基础设施

最后的想法是,如果您不需要 mysql 索引或 ACID 等功能,为什么不直接写入文件。 因为您永远不会获得与写入文件相同的性能

您可以使用各种技巧来改进 speed of INSERT。 link 是 MySQL 手册,其中涵盖了很多技巧。

但您永远无法接近直接写入文件的速度。 MySQL 在幕后做了很多额外的工作,解析 SQL,强制访问权限,强制数据约束,并将数据转换为数据类型的紧凑表示,然后将数据组织成高效归档,并更新索引。

如果您使用 InnoDB(默认)作为您的存储引擎,您总是至少要更新主键索引。 InnoDB 将 table 数据存储为聚集索引。

真正获得与附加到文件相同速度的唯一方法是使用 CSV storage engine,然后 直接附加到该文件。即根本不用SQL,直接写入数据文件即可。如果文件位于正确的位置并且具有正确的名称,它将成为您 MySQL table.

的数据