我正在优化将约10TB数据导入MySQL数据库的过程。目前,我可以在当前笔记本电脑上约14分钟内导入2.9GB(+ 0.8GB索引)。该过程包括读取数据文件(Oracle“ .dat”导出),解析数据,将数据写入CSV文件并在其上执行“ LOAD DATA LOCAL” sql命令。
是否可以提高导入速度(无需更改硬件)?有没有一种方法可以删除将文件写入文件系统并让MySQL再次读取它的步骤。是否可以将内存中的数据直接流传输到MySQL(例如,通过JDBC驱动程序)?
预先非常感谢,Joerg。
从MySQL Connector / J JDBC驱动程序版本5.1.3开始,您似乎可以使用com.mysql.jdbc.Statement连接InputStream引用。setLocalInfileInputStream()方法,在Java代码内部,用于将内存格式的字符串/文本“管道”到“ LOAD DATA INFILE”调用。这意味着您不必写出并从内存中重新读取临时文件。请参阅:
http://dev.mysql.com/doc/refman/5.1/zh-CN/connector-j-reference-implementation-notes.html(页面底部)
此帖子还概述了该过程:
http://jeffrick.com/2010/03/23/bulk-insert-into-a-mysql-database
O'reilly制作了一个包含MySQL / JDBC性能gem的PDF。
还提到了它在Hadoop中的用法(高级Java主题)。
希望对您有帮助。
干杯
丰富
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句