我前段时间创建了一个代理/抓取工具,它最终记录了很多文件。我认为这将是一个简单而可靠的解决方案,但我意识到,一旦接近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令人困惑,而且还没有找到任何其他解决方案。我该怎么办?
答案 0 :(得分:0)
这个问题要求太多。它不仅仅是一次点击即可。我认为更多人有这样的问题,但后来我意识到每个人都在使用预制搜索引擎。
我最终将整个数据库下载到我的Windows计算机,并在c#中编写程序,自动遍历所有文件,获取内容并将其发布到我安装在Debian服务器上的elasticsearch数据库。我应该创建一个文件到文件转换器而不是文件到纯POST请求。
这样做的缺点是速度不是太高,将700,000个文件传输到数据库需要2个小时。
由于我在文件中使用的特定字符串,程序不会公开发布。所以这比我预期的要难得多。
C#应用结果: