首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何快速扫描大文本文件中的域名?(Laravel,PHP)

问如何快速扫描大文本文件中的域名?(Laravel,PHP)
EN

Stack Overflow用户
提问于 2020-01-21 15:30:25
回答 2查看 125关注 0票数 2

我有一个大的文本文件,它被检查是否有“错误的urls”。当针对这个列表处理一堆url时,每个url大约需要1秒来验证它不在该列表中。

下面是我当前的代码:

代码语言:javascript
复制
$badDomainsFile = file_get_contents(base_path().'/resources/txt/bad-domains.txt');
$badDomains = explode("\n",$badDomainsFile);
foreach ($badDomains as $badDomain){
   if($badDomain===$domain){
      $isBadDomain = true;
      break;
   }
}

我想也许我可以用一些exec('grep -n $path')风格的代码来加快速度,但我在我的本地机器(windows)上遇到了问题,我相信文件路径在服务器(linux)上会有所不同?我本地机器上的laravel中的所有东西都是通过Homestead运行的,但我也很困惑,如果php脚本是针对该文件路径运行的,还是针对我自己的网站本地系统位置运行的?

还有没有其他的想法来加速这个脚本?(我尝试运行一个逐行fgets()样式的脚本,但每个url需要11秒。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-21 16:11:04

一种可伸缩的解决方案是将列表保存在数据库中(MySQL或应用程序的其他部分),并让引擎负责优化。任何像样的DB引擎都允许索引和缓存开箱即用的列表。从而减少了加载时间并加快了搜索速度。

读取文件时,每次从磁盘加载整个文件并执行完全扫描时。此操作的复杂度为O(n)

从包含唯一项的索引列表中读取数据时,复杂性为O(1)

即使列表增长到数十亿个项目,对搜索速度的影响也是微不足道的。

票数 1
EN

Stack Overflow用户

发布于 2020-01-21 15:44:49

您正在从文件中读取。您可以尝试读取它一次并将其存储在某种缓存中,而不是像memcached或redis那样。它应该会给你带来更好的性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59836099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档