问题由来前些天工作中遇到一个问题:有 60万 条短消息记录日志,每条约 50 字,5万 关键词,长度 2-8 字,绝大部分为中文。要求将这 60万 条记录中包含的关键词全部提取出来并统计各关键词的命中次数。本文完整介绍 ...,问题由来前些天工作中遇到一个问题:有 60万 条短消息记录日志,每条约 50 字,5万 关键词,长度 2-8 字,绝大部分为中文。要求将这 60万 条记录中包 含的关键词全部提取出来并统计各关键词的 命中次数。本文完整介绍了我的 实现方式,看我如何将需要运行十小时 的任务优化到十分钟以内。虽然实现语言是 PHP,但本文介绍的更多的思想,应该能给大家一些帮助。原始 - grep设计一开始接到任务的时候,我的小心思立刻转了起来,日志 + 关键词 + 统计,我没有想到自己写代码实现,而是首先想到了 linux 下常用的日志统计 命令 grep。grep命令的用法不再多提,使用 grep 'keyword' | wc -l 可以很方便地进行统计关键词命中的信息条数,而php的 exec() 函数允许我们直接调用 linux 的 shell 命令,虽然这样执行危险命令时会有安全隐患。代码上伪代码:foreach ($word_list as $keyword) { $count = intval(exec(grep '{$keyword}' file.log | wc -l)); record($keyword, $count);}在一台老机器上跑的,话说老机 器效率真的差,跑了6小时。估计最新机器2-3小时吧,后面的优化都使用的新机器,而且 需求又有变动,正文才刚刚开始。原始,原始在想法和方法。进化 - 正则设计交了差之后,第二天产品又提出了新的想法,说以后想把某数据源接入进来,消息以数据流的形式传递,而不再是文件了。而且还要求了消息统计的实时性,一下把我想把数据写到文件再统计的想法也推翻了,为了方案的可扩展性,现在的统计对象不再是一个整体,而是要考虑拿n个单条的消息来匹配了。这时,略懵的我只好祭出了最传统的工具- 正则。正则的实现也不难,各个语言也都封装好了正则匹配函数,重点是模式(pattern)的构建。当然这里的模式构建也不难,/keyword1|keword2|.../,用|将 关键词连接起来即可。正则小坑这里介绍两个使用中遇到的小坑:正则模式长度太长导致匹配失败:PHP 的正则有回溯限制,以防止消耗掉所有的进程可用堆栈, 最终导致 php 崩溃。太长的模式会导致 PHP 检测到回溯过多,中断匹配,经测试默认设置时最大模式长度为 32000 字节 左右。php.ini 内 pcre.backtrack_limit 参数为最大回溯次数限制,默认值为 1000000,修改或php.ini 或在 脚本开始时使用ini_set(‘pcre.backtrack_limit’, n); 将其设置为一个较大的数可以提高单次匹配最大模式长度。当然也可以将关键词分批 统计(我用了这个=_=)。模式中含有特殊字符导致大量warning:匹配过程中发现 PHP 报出大量 warning:unknown modifier 乱码,仔细检查发现关键词中有/字符,可以使用p reg_quote()函 数过滤一遍关键词即可。代码上伪代码:$end = 0;$step = 1500;$pattern = array();// 先将pattern 拆成多个小块while ($end count($word_list)) { $tmp_arr = array_slice($word_list, $end, $step); $end += $step; $item = implode('|', $tmp_arr); $ patter n[ ] = preg_quote($item);}$content = file_get_contents( $log_file);$lines = explode(
提 交 百 度 : 当 内 容 修 改 完 之 后 ,要 将 文 章 链 接 地 址 重 新 提 交 给 百 度 ,好 再 次 抓 取 。
资 源站群:它是 一种相 对比较 常 规的作 弊手段,利 用大量的 域 名和服务 器 IP站 群 ,通 过 合理的 链 接 布局 ,形成 有效的链 轮, 并采 集 优质 的内 容,利 用资源密集型策略 ,提高网站排名。S EO互 点,对 于S EO 互点 实现的快速排名, 这 个 大 家都 非常 清楚 ,我们 就不 多 说 。 什么 是白帽 S E O ?简 单 理解:白 帽S EO主要是指以解 决 目标用户 真 实搜索 需求为核心 目 的 ,采用常 规的 优化 策略,甚 至摒弃技 术S EO排名的 一 种策略, 坚持以用 户 为 中心 ,毫无疑问 ,它 一定是 一个长周 期 的 工作
站 内 的 文 章 要 有 基 本 的 原 创 度
自 从 百 度 推 出 星 火 计 划 之 后 ,搜 索 引 擎 对 网 站 的 原 创 性 要 求 也 更 高 了 ,所 以 对 网 站 收 录 的 原 创 要 求 也 是 更 高 ,所 以 现 在 站 内 的 文 章 切 忌 不 能 采 集 ,最 好 是 保 持 一 定 的 原创性,就算不能纯手写原创,至少也要在原作的基础上有自己的改动。