5

我必须以每秒大约 5 次的速度将大量数据写入 MySQL 数据库。最快的方法是什么:每 1/5 秒插入一次或创建一个队列并每 5 秒插入一次所有存储的数据?如果第二种方法更好 - 是否可以使用 1 个请求插入 1 个表几行?

4

5 回答 5

2

将多个缓冲池与innodb_buffer_pool_instances. 它可以取决于机器上的核心数量。表的使用Partitioning
您可以使用XML.

于 2012-06-12T07:45:46.510 回答
2

由于每笔交易都有固定成本,我会说每隔几秒进行一次多行插入会更好。对于我们在工作中使用的一些系统,我们会缓存数百行,然后一次性将它们全部插入。

MySQL 文档中,您可以像这样进行多行插入:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
于 2012-06-12T07:46:38.570 回答
2

考虑到插入的频率最好使用第二种方法,即排队而不是一次性添加。!

但是您应该首先考虑这些情况:

  1. 你的系统是实时的吗?是的,那么您可以承受的最大延迟是多少(因为下一次插入和数据保持/可用大约需要 5 秒)?

  2. 数据中出现不正确值/错误的可能性有多大,好像一个数据不正确,如果查询必须失败,您将失去一切。

于 2012-06-12T07:51:32.797 回答
1

您可以使用所有数据进行插入,而无需像这样:

INSERT INTO table (field1, field2,... , fieldN )
VALUES 
(value1_1', value1_2,... , value1_N),
(value2_1', value2_2,... , value2_N),
...
(valueM_1', valueM_2,... , valueM_N);
于 2012-06-12T07:45:52.300 回答
1

我的经验是,将数据插入 MySQL 数据库时,使用批处理会更快。

所以较慢的选项是执行多个插入查询:

    插入 my_table 值(1,“a”);
    插入 my_table 值(2,“b”);

更快的选择是:

    INSERT INTO my_table VALUES (1, "a"), (2, "b");

于 2012-06-12T07:47:36.293 回答