将文件夹和子文件夹的路径导入更快的数据库引擎

时间:2017-05-04 18:30:40

标签: php mysql database apache2

我前段时间创建了一个代理/抓取工具,它最终记录了很多文件。我认为这将是一个简单而可靠的解决方案,但我意识到,一旦接近1 000 000个文件,我遇到了越来越多的问题。搜索数据库最多可能需要15秒,而且我在上周遇到过服务器崩溃两次。我测试了重启apache2,搜索" test"和垃圾邮件" free -m"终端中的命令。我注意到公羊突然上升了,可能是公羊造成了撞击。我不确定是什么让搜索引擎变速,但我真的很想知道。

所有文件都存储在:

database/*/*/*.txt

并使用此代码完成所有操作:

$files = array();
$dir = '/var/www/html/database';
foreach (glob($dir . '/*/*/*.txt', GLOB_NOCHECK) as $path) {
    $title = basename($path, ".txt");
    if(strripos($title,$search) !== false){
        array_push( $files, $path );
    }
}

代码要长得多,但我只想展示它的工作原理。

每个文件包含大约6行有用信息。

所以我开始寻找解决方案,并且想了想。如果我将搜索解析为比Java或C更快的搜索速度,那该怎么办?啊,这将是一团糟..所以我想到了MySQL。但是我应该如何将文件夹和子文件夹中的所有文件传输到MySQL?服务器正在运行Debian,带有4 GB ram和i3处理器。

我还没有采取任何行动,因为MySQL令人困惑,而且还没有找到任何其他解决方案。我该怎么办?

1 个答案:

答案 0 :(得分:0)

这个问题要求太多。它不仅仅是一次点击即可。我认为更多人有这样的问题,但后来我意识到每个人都在使用预制搜索引擎。

我最终将整个数据库下载到我的Windows计算机,并在c#中编写程序,自动遍历所有文件,获取内容并将其发布到我安装在Debian服务器上的elasticsearch数据库。我应该创建一个文件到文件转换器而不是文件到纯POST请求。

这样做的缺点是速度不是太高,将700,000个文件传输到数据库需要2个小时。

由于我在文件中使用的特定字符串,程序不会公开发布。所以这比我预期的要难得多。

C#应用结果: Screenshot