【问题标题】:Fast blacklist processor in php?php中的快速黑名单处理器?
【发布时间】:2014-07-04 13:57:31
【问题描述】:

我有一个带有搜索功能的网站,但我想查看列入黑名单的关键字的搜索词

问题是列表太大,现在网站加载缓慢(第一个字节 3-5 秒),CPU 负载高。 该列表中有 45.000 行(~1.5 mb)

我尝试拆分成几个较小的文件,但速度仍然很慢

黑名单功能适用于每次搜索 你可以在下面看到它

function CheckForBlockedWords(){

     $blackList=array();
 $string1 = trim(strtolower(str_replace("_"," ",$_GET['search'])));
 $string1 = preg_replace('/-+/', ' ',$string1);
 $string1 = preg_replace('/\s+/', ' ',$string1);
 $string1 = trim($string1);
  foreach (glob("/home/keywords2/*") as $file) {
        $blackList = file($file);

foreach($blackList as $word)
            {

                 $string2 = trim(strtolower(str_replace("_"," ",$word)));
                 $string2 = str_replace("-"," ",$string2);

                 //$string2 = preg_replace('/-+/', ' ',$string2);


                 $string2 = preg_replace('/\s+/', ' ',$string2);


                $string2 = trim($string2);

                if(strpos($string1, $string2) !== false   )
                {
                    echo "<div class='blockedSearch'>What you are searching is blocked!</div>";
                    return true;
                }
            }

 }

        return false;
}

有什么方法可以更快地做到这一点?

【问题讨论】:

标签: php arrays preg-replace


【解决方案1】:

文件系统很慢。数据库速度很快,因为它们有索引并且可以缓存查询。所以你最好设置一个小表,如果用户键入的关键字在该表中列出,则在该表中进行搜索。这比从磁盘读取文件并循环遍历它们要快得多。

【讨论】:

  • RAM 很快。您可以使用 memcache、redis、apc 或某种类型的 apache solr 搜索。所有这些都使用内存并且比数据库更快。
  • 如果您的数据库服务器配置正确,那么它将具有与使用带有 memcache 等的 DIY 解决方案相当的速度。后者将花费更多时间来配置,在共享服务器上很难,当php 作为 cgi 运行,需要大量经验。 Jup RAM 更快,但开发速度要慢得多 :-)
  • 我尝试过使用 APC,但速度更慢.. 我想使用数据库以外的其他解决方案,在我之前的工作中,它减慢了我使用它的网站。我会尝试 sql 看看结果如何,我没有使用 memcache 的经验,但我认为它会运行得更快。
猜你喜欢
  • 2012-09-21
  • 2018-03-04
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-13
相关资源
最近更新 更多