php - 导入 140 万行 800mb 制表符分隔文件的最佳方法是什么?

标签 php mysql phpmyadmin

我有一个 800mb 的制表符分隔文件,其中包含 140 万条记录,我需要将其输入 MySQL 数据库。在我运行任何使我的本地机器瘫痪的东西之前,我想知道最好的方法是什么。当我获得包含更新数据的新文件时,我将需要每 4-6 周执行一次此操作。

我一直认为以下其中一项可能是最好的,但不确定:

选项 1

$input = file('data-file.tab', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$filedata= array();

foreach ($input AS $line) {

    $data = explode("\t", $line);

    // function to import data to MySQL

}

选项 2

将文件拆分成可管理的 block 并通过 phpMyAdmin 导入。

最佳答案

我不会通过 phpmyadmin 执行此操作。我知道这可能是您更熟悉的界面,但如果您管理的是工业规模的数据集,则应该习惯使用其他更高效、更可靠的工具。

转到命令行并使用 mysqlimport .这是 LOAD DATA statement 的命令行界面.您可以在客户端主机上执行此操作并远程导入,也可以将文件上传到数据库服务器并在本地导入。

要拆分文件,我会使用 pt-fifo-split .这使得在文件 block 上编写 shell 循环变得容易,而无需将文件物理拆分为多个较小的文件。

关于php - 导入 140 万行 800mb 制表符分隔文件的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26110990/

相关文章:

php - PHP 数组中的 MySQL SELECT 查询

mysql - 将数据加载到mysql LOAD DATA INFILE 困难

Mysql Group By 24小时间隔

php - 如何使用 PHP 将上传的 swf 文件存储在 MySQL 数据库中?

PHP7.1 上的 phpMyAdmin mcrypt 错误

php - 查找重复项的最佳性能算法是什么?

php - 通过链接导航多个对象而不重复

Php Mysql数据库检索与显示

php - 作为 web 服务响应的一部分传输 zip 数据/可逆 mb_detect_encoding

mysql - 如何使用 mySql 多次执行插入查询到表中