问题描述
我有一个Macbook pro 2019 touch,i5、8M,HD 256 GB使用的75GB,OSX 10.15.2。安装了ampps 3.9和Msql Workbench 8.0
我正在导入Localhost,这是一个CSV 1.9 GB 1500万寄存器的MysqL表,在12小时后仅导入了300万。
已经探测XAMPP VM并在mariaDB控制台中执行LOAD DATA INFILE失败。它与数据库断开连接。
我将使用PHP处理表。有任何帮助或建议,以便使这些过程变得更快吗?
我使用Sequel pro读取远程数据库,速度非常快,但不再适用于本地主机。
非常感谢
解决方法
在将csv文件(大约5百万条记录)导入mysql表时,我遇到了类似的问题。我设法使用nodejs做到了这一点,因为它能够逐行打开和读取文件(而无需将整个文件加载到ram中)。该脚本读取100行,然后进行INSERT,然后读取另外100行,依此类推。它在大约9分钟内处理了整个文件。它使用readline
模块。脚本的主要部分如下所示:
const Fs = require('fs');
const Mysql = require('mysql2');
const Readline = require('readline');
const fileStream = Fs.createReadStream('/path/to/file');
var dbConnection = Mysql.createConnection({
host : "yourHost",user : "yourUser",password : "yourPassword",database : "yourDatabase"
});
const rl = Readline.createInterface({
input: fileStream,crlfDelay: Infinity
});
async function run() {
var lineElements = [];
for await (const line of rl) {
// Each line in will be successively available here as `line`.
lineElements = line.split(",");
// now lineElements is an array containing all the values of the current line
// here you can queue up multiple lines,to make a bigger insert
// or just insert line by line
await dbConnection.query('INSERT INTO ..........');
}
}
run();
上面的脚本在每个查询中插入一行。如果要查询插入100行或任何其他值,则可以随意修改它。
请注意:因为我的文件是“受信任的”,所以我没有使用准备好的语句,因为我认为简单查询的速度更快。我不知道速度增益是否显着,因为我没有进行任何测试。