我有一个问题,我已经编写了一个解决方案,但它非常慢。所以我需要一个巨大的改进,或者可能是另一种方式的暗示。
情况如下:
本地磁盘上有一个包含许多子文件夹的目录,总共约有100000个文件,大约需要25 GB,因此一个文件大约有250 KB。所有文件都是文本文件,我不知道主目录路径树的结构。 pathtree,文件名及其内容可以定期更改。
我想要实现的是,将所有这些文件导入到mysql表中,该表至少应该包含文件的路径及其内容。
例如:
+++++++++++++++++++++++++++++++++++
+ NAME + TYP +
+++++++++++++++++++++++++++++++++++
+ path + varchar(500) +
+ content + longtext +
+++++++++++++++++++++++++++++++++++
我的第一种方法是java-programm,它以递归方式搜索主目录中的所有文件。读取每个文件,并将内容存储在String中。之后,我为每个文件调用INSERT。
我启动了程序,但在第一个小时它只处理了3600个文件,因此只有3,6%。总进口27小时是一点点。 ; - )
有没有人知道如何改进?
在这种情况下,我不认为我可以以任何方式使用LOAD DATA INFILE。也许还有另一个可以提供帮助的mysql函数吗?
首选java解决方案,但C / C ++也是可行的。也许有人可以猜到这可以加快这个过程的速度?
也可以更改mysql-server的设置。但我不是那个话题。
系统是linux上的mysql-server,文件也存储在同一台服务器上。解决方案通常应该是os独立的。
非常感谢所有建议!
答案 0 :(得分:0)
所以,解决方案非常简单。
首先,我使用直接在insert语句中使用的mysql的“load_file”函数获得了主要的改进。
此外,我不会在java程序中搜索所有文件。相反,我首先使用linux中的find-command创建一个包含所有文件路径的txt文件,然后遍历这些行。