2

我在 csv 文件中有一些数据。数据量巨大(约 65GB)。我想将它们全部插入数据库中,以便以后可以查询它们。

csv 文件本身非常简单,它只有 5 列。所以基本上所有的数据都会被插入到一个表中。

现在我尝试将这些数据插入到 mysql 数据库中,但它所花费的时间非常长。我花了将近 6 个小时才插入其中的 1.3GB 数据(我的处理器是 core i5 2.9 GHz,RAM 是 4GB DDR3)。

此加载需要很快完成,以便所有数据插入应在 4/5 天内完成。

如果数据的查询速度可以接受,那么在这种情况下,哪个数据库将显示出最佳性能?

另外,我还应该遵循其他一些步骤/做法吗?

4

1 回答 1

1

您可能甚至不需要导入它。您可以使用 engine=CSV 创建一个表。

mysql> 创建表 mycsv(id int not null) engine=csv;
查询正常,0 行受影响(0.02 秒)

然后进入您的数据目录并删除 mycsv.CSV 并将您的 CSV 文件移动/复制/符号链接为 mycsv.CSV。返回 mysql 并输入flush tables;,一切顺利。(注意:它可能无法使用,\r\n因此您可能需要\n先将它们转换为)。

如果您使用 InnoDB,问题是它必须跟踪插入的每一行的每个撤消日志条目,这需要大量资源,需要很长时间。最好以较小的批次进行,这样它就可以在内存中进行大部分撤消日志跟踪。撤消日志在那里,以防您在加载过程中按 ctrl-c 它需要回滚。加载该批次后,它不再需要跟踪它。如果您一次完成所有操作,那么它必须跟踪所有这些撤消日志条目,可能必须进入磁盘——这是一个杀手。

如果我知道我不打算进行行级锁定,我更喜欢将 myisam 用于数据,例如如果我想运行一个长程序来分析数据。该表已锁定,但我只需要在其上运行一个程序。另外,您始终可以使用合并表——它们采用 myisam 表,您可以将它们组合到一个表中。我喜欢对每个表都是一个月数据的日志文件执行此操作。然后我有一个合并表一年。合并表不复制数据,它只是指向每个 myisam 表。

于 2013-03-16T23:48:40.147 回答