我在csv文件中有一些数据。数据量很大(大约65GB)。我想将它们全部插入数据库,以便以后可以查询它们。
csv文件本身非常简单,它只有5列。所以基本上所有的数据都会被插入到一个表中。
现在我试着将这些数据插入到mysql数据库中,但是花费的时间非常巨大。我花了将近6个小时才插入1.3GB的数据(我的处理器是核心i5 2.9GHz,RAM是4GB DDR3)。
这个加载需要很快完成,这样所有的数据插入都应该在4/5天内完成。
在这种情况下,哪一个数据库将显示最佳性能,前提是可以接受合理的数据查询速度?
另外,我还应该遵循其他步骤/实践吗?

最佳答案

你甚至不需要导入它。您可以使用engine=csv创建一个表。
mysql>create table mycsv(id int not null)engine=csv;
查询正常,0行受影响(0.02秒)
然后进入数据目录,删除mycsv.csv,并将csv文件移动/copy/symlink为mycsv.csv。回到mysql并键入flush tables;就可以了。(注意:它可能不适用于\r\n,因此您可能需要先将它们转换为\n)。
如果您使用的是innodb,问题是它必须跟踪插入的每一行的每个undo日志条目,这需要大量资源,占用大量时间。最好分批完成,这样它可以在内存中完成大部分的撤消日志跟踪。如果您在加载过程中按ctrl-c键,并且需要回滚,那么撤消日志就在那里。在那批货装好后,就不需要再跟踪了。如果您一次完成所有操作,那么它必须跟踪所有撤消日志条目,可能必须转到磁盘—这是一个杀手。
如果我知道我不打算进行行级锁定,比如我想运行一个长程序来分析数据,那么我更愿意使用myisam来处理数据。桌子是锁着的,但我只需要在上面运行一个程序。另外,您可以始终使用合并表——它们采用myisam表,您可以将它们组合成一个表。我喜欢对每个表都是一个月数据的日志文件执行此操作。然后我有一个合并表一年。合并表不复制数据,它只指向每个myisam表。

10-02 03:56
查看更多