我们目前正在对 MySQL 进行多项性能测试,以将其与我们正在为数据库原型开发的方法进行比较。简而言之:数据库是空的,给定一个巨大的 csv 文件,尽可能快地将数据加载到内存中。
我们正在一个 12 核 Westmere 服务器上进行测试,该服务器具有 48 GB RAM,因此内存消耗现在不是一个真正的问题。
问题如下。我们选择了 MySQL(广泛传播,开源)进行比较。由于我们的原型是内存数据库,因此我们选择了 MySQL 中的内存引擎。
我们以这种方式插入(文件最大为 26 GB):
drop table if exists a.a;
SET @@max_heap_table_size=40000000000;
create table a.a(col_1 int, col_2 int, col_3 int) ENGINE=MEMORY;
LOAD DATA CONCURRENT INFILE "/tmp/input_files/input.csv" INTO TABLE a.a FIELDS TERMINATED BY ";";
对 2.6 GB 文件执行此加载大约需要 80 秒,比 ( ) 慢四倍wc -l
。使用 MyISAM 仅慢 4 秒,即使正在写入磁盘。
我在这里做错了什么?我想使用内存引擎的数据写入必须比使用 MyISAM 快得多。而且我不明白为什么wc -l
(都是单线程的,但写入内存并没有那么慢)要快得多。
PS:更改 read_buffer_size 或我在谷歌上发现的任何其他变量,并没有带来显着的改进。