2015-06-25 39 views
0

我有一个问题,我已经编写了一个解决方案,但它非常缓慢。所以我需要对其进行巨大的改进,或者以另一种方式提示。mysql批量导入文件到longtext

的情况如下:

有上包含许多子文件夹本地磁盘目录,并在总10多万文件大约需要25 GB,所以一个文件中有大约250 KB。所有文件都是文本文件,我不知道主目录的路径树的结构。路径树,文件名及其内容可以定期更改。

我想要实现的是将所有这些文件导入到一个mysql表中,该表至少应该保存文件的路径和内容。

例如:

+++++++++++++++++++++++++++++++++++ 
+ NAME  + TYP    + 
+++++++++++++++++++++++++++++++++++ 
+ path  + varchar(500) + 
+ content + longtext  + 
+++++++++++++++++++++++++++++++++++ 

我的第一种方法是一个java-PROGRAMM,搜索主目录递归的所有文件。读取每个文件并将内容存储在字符串中。之后,我为每个文件调用INSERT。

我启动了程序,但在第一个小时内它只处理了3600个文件,所以只有3.6%。总进口27​​小时是有点多。 ;-)

有没有人有一个想法,我可以改善呢?

我不认为我可以在这种情况下以任何方式使用LOAD DATA INFILE。也许还有另一个可以帮助你的mysql函数?

Java解决方案是首选,但C/C++也是可能的。也许有人可以猜测这可以加速这个过程?

也可以更改mysql服务器的设置。但我没有进入这个话题。

系统是linux上的mysql服务器,文件也存储在同一台服务器上。一般来说,解决方案应该与OS无关。

非常感谢所有的建议!

回答

0

所以,解决方案非常简单。

首先,我使用直接在insert语句中使用的mysql的“load_file”函数获得的主要改进。

此外,我不搜索现在在java程序中的所有文件。相反,我首先使用来自linux的find命令创建了一个包含所有文件路径的txt文件,然后循环遍历行。