ZERO:SEO界奇才 就职单位(保密)

ZERO授权ITSEO发布其文章,如您要转载请上http://seosay.me与其取得联系!

对于转载不注明出处者,我们将投诉,并且在itseo中公布其不道德行为!

 

大网站有大网站的好处——数据极其之丰富;大网站也有大网站的坏处——数据处理极其之麻烦。处理海量数据至今也算略有些经验了,稍总结下:

 

 

1. 数据简化

 

这里的“数据简化”,指的是采用相对更容易计算的数据指标。比如说两个最常用指标:UV与Visits(此处定义为类似于服务器日志里面的单条数据),因为两者数值接近、趋势一般情况下等同,所以对于SEO流量的多数分析,两个指标都可以。

但在大规模数据处理中,通常一开始的原始数据是Visits,需要通过user的id来排序等计算非常耗时的步骤,才能计算出UV。所以一般情况下,UV没必要去额外计算。

 

2. 数据精简

 

对于一个大网站,一天几十几百G的数据是不奇怪的。如此庞大的数据,定时生成报表或还能实现,但已经不太可能用作及时性的分析了。所以需要将数据的体积最小化。

比如说只需要去除后续访问的SEO流量数据,它在总流量数据中的占比往往是很小的,立马一大堆数据就精简了。然后SEO流量还可以继续精简,比如User-Agent、请求文件大小等数据往往不需要;Referer也没必要完整存下来,可以只提取出其中的来源关键词等信息。

这样精简下来,原来一天几十几百G的文件,就变成一天几十几百M的文件了,哪怕一台小VPS都能撑得住。

 

3. 基础数据分析

 

如果单条grep命令能搞定分析需求的话,它往往是个很理想的解决方案。活用^$等,可以精确匹配到预计的字段。

用grep分析的前置需求是,数据必须被分隔成一个个小文件(通常按日分隔),不然计算效率会极慢。

 

4. top-n数据分析

 

top-n,简言之就是流量最高的100个页面、流量最高的100个关键词之类的。Python可以比较简单的完成这个工作,且内置堆排序算法(top-n的高效计算算法);Ruby可以用比Python还少的代码量完成前半段工作,但内置的排序算法比较少,堆排序还要到其它地方找。

我的大致代码是,创建个hash表,key为关键词、URL之类的,value来计数。遍历数据文件的每一行,看到不符合要求的数据,continue。最终侥幸没有被continue掉的那部分数据,就往hash表去计数。最终排序下,就得到想要的结果了。代码行数也挺少。