将数据插入到数据库中。

5

我需要每秒写入MySQL数据库大量数据,大概5次左右。 哪种方法更快:每1/5秒插入一次,还是制作队列并每5秒插入所有存储的数据?如果第二种方法更好 - 是否有可能使用一个请求将几行插入到1个表中?

5个回答

2

使用多个缓冲池和 innodb_buffer_pool_instances,这取决于机器上的核心数。 使用表的 分区。 您可以使用 XML 收集插入的数据。


2
考虑到插入的频率,最好采用第二种方法,即排队然后一次性添加。但是您应该先考虑以下情况:
1. 您的系统是否实时?如果是,那么您能承受的最大延迟是多少(因为下一个插入和数据持久化/可用性需要约5秒钟)?
2. 数据中出现错误值/错误的可能性有多大,因为如果一个数据不正确,查询必须失败,您将失去其余所有数据。

是的,这个系统是实时的。数据是一个简单的Base64编码,大约有100字节的数据。 - Max Frai
2
如果是这样,我会选择单个插入,并在DAO层使用连接池。因为在实时系统中你不能承受数据丢失,时间也很关键!希望这可以帮到你。 :) - Anuj Patel

2

由于每个事务都有固定的成本,我认为每隔几秒钟进行一次多行插入更好。在我们工作中使用的某些系统中,我们会在插入之前缓存数百行。

MySQL文档中可以了解到如何进行多行插入:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);

1

我的经验是,将数据插入MySQL数据库时,批量处理速度更快。

因此,“较慢”的选项是执行多个插入查询:

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

“更快”的选项是:

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


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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接