起初使用java读文件处理格式后存入数据库,运行后发现,效率太低太低,4G文本,4000多万行,估计需要30天左右才能完成处理。
数据格式:
每行-> XXXX ||| XXXXXXX ||| XXXXXXXXXXXXXXXXX
数据是严格结构化的,因此查询到一种直接从文件导入mysql的方法:
Load Data infile
使用的指令如下:
load data infile '/home/lenovo/文档/NLPCC2015/auxiliary-data/NLPCC-2015.Auxiliary.KB.Chinese'
ignore into table detail_all character set utf8 fields terminated by ' ||| '
lines terminated by '\n' (`subject`,`predicate`,`value`);
根据[ ||| ]分割一行数据,分割成三段,然后每行根据\n识别,三段数据分别存入三个字段。
成功导入47943428 rows !
导入后发现每行结尾还有\r存在,下面消除\r符号
update detail_all set value = trim(TRAILING '\r' FROM `value`);
用trim消除开头和最后的符号。
运行时报错:
Error Code: 2013. Lost connection to MySQL server during query 600.746 sec
查到解决方案:http://www.quora.com/How-can-I-solve-the-Error-Code-2013-Lost-connection-to-MySQL-server-during-query-600-135-sec-error-message
即把超时的时间调大即可。
随后运行报错:
Error Code: 1205. Lock wait timeout exceeded; try restarting transaction
我这里是回滚进程没有结束,等待其结束即可。