数据分析基础算法大观


数据中心就是数据处理的中心,数据是数据中心里最宝贵的资产。没有数据需要处理,数据中心也就失去了存在的意义。仅仅有数据,没有分析与处理,对于社会来说,这些数据没有体现出其应该有的价值,通过数据中心对数据进行二次加工处理,则可能产生出巨大的财富。21世纪社会发展开启了大数据时代,与此同时,大数据也将反作用于社会,将给社会带来巨大的变革。而只有数据中心才能够担负起大数据分析的重任,然而面对这些海量的数据,如何进行高效分析,并得到预期效果,那就是数据中心要认真去考虑的事情了。除了通过耗费大量资金去购买各种服务器,提升网络和存储能力这些硬件参数之外,关键是要采用高效的软件数据处理算法,在单位时间内,相同的硬件资源条件下,可以计算更多的数据。下面就来说一说那些常用的数据处理算法。

数据分析的方法有很多,比如聚类分析、因子分析、相关分析、对应分析、回归分析等等,而这些数据分析的方法往往忽略了一个非常关键的因素:计算性能,数据中心需要的就是这些计算性能高的数据分析方法,比如HASH算法,二叉树算法。

HASH算法一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入,通过散列算法,变换成固定长度的输出,该输出就是散列值。,HASH算法是根据特定的索引在海量的数据当中以最快的速度查找,这种方法在任何的数据分析中都有应用。比如:我们数据中心有这样一个应用系统,就是记录进入数据中心人员,那么当我们需要知道某个人是否以前也曾进入数据中心的时候,就需要在以往的登记数据中查找,比如我们系统记录的是身份证号码,那么怎么样才能以最快的速度匹配呢。当然我们可以从头到尾一条一条的查找,这时找到花费的时间是不定的,可能一次就找到,也可能几千次都找不到。若采用HASH算法,基本通过一次查找就可以找到。我们可以通过HASH算法,将每个进入数据中心的人身份证都进行HASH计算(一般是选取不同位的数值进行异或运算),算出来的索引记录保存到HASH 表中,随着进入的人越来越多,HASH表也会越来越大。当我们需要得到现在进入数据中心的人是否曾经来过,那么根据这个人的身份证数据算出索引值,根据这个索引值直接去HASH表的这个位置去看是否为空,如果非空,就表明此人曾经来过,如果是空,就表明此人以前从来没有进入过。这只是一个HASH算法的举例,实际的应用系统算法要比这个复杂得多,但数据处理的根本还是要靠HASH算法来提升计算性能,有时甚至要做多次HASH计算。

我们在大学学习过数据结构课程的都知道,有个二叉树算法,这是树形算法的一种。其计算的理念就是将数据一分为二,然后判断要查找的数据属于哪一部分,这样一次计算就排除掉了一半的数据量,以此类推,每计算一次就可以排除一半的数据,这种算法虽然没有HASH 算法效率高,但使用简单,编程设计容易实现,在一些要求不太高的软件计算系统中也应用很普遍。这两种算法都为在海量数据中查找到需要的数据提供了快速的计算方法,其实我们在百度上没搜索一次,就是在海量的网页里面查找想要搜索的数据,那么在搜索的算法中,就广泛地使用了HASH和二叉树算法,除了这些算法,还有一种就是集群算法。

在海量的网页里查找到关键字,仅仅靠一台服务器计算是不可能在短时间完成的,而我们在搜索的时候几乎在一秒之内就会得到数万条搜索记录,其实后台是靠数百台服务器同时计算完成的,这些服务器我们定义为一个集群系统。集群技术就是使用多个服务器的计算资源来共同完成一件事,和我们经常谈及的云计算类似,可以将集群技术归结为云计算的前身,在云计算概念没有出来之前,基本都是集群技术的天下。比如在奇虎360,采用200台服务器完成搜索的工作,当然百度的搜索集群的服务器数量要更多一些,当一个搜索词语进来,通过集群技术就将需求同时发向200台服务器,每台服务器将计算的结果发给发出请求的服务器,这200台服务器哪个都可以作为发起请求的服务器,当得到其余199台设备返回的结果,然后就将计算的结果返回给用户。通过增加集群里服务器的数量,就可以达到提升计算性能的目的。另外集群技术还有一个好处,就是假如这200台设备有一台是故障的,并不会大大影响计算的性能,有其余的199台承担全部的搜索需求,避免出现由于单台硬件故障导致搜索功能无法使用。在我们实际的使用中可以回忆一下几乎从来没有遇到过百度搜索不好用的情况,就是因为采用了集群技术,不仅计算速度快,还能避免单点故障导致整个搜索无法进行。一般搜索系统至少多做好两到三个集群系统,当其中一个集群无法工作时,可以将搜索需求调整到其它的集群系统中来计算完成,避免了整个搜索业务瘫痪掉。

除了这些算法,其实还有不少的提升计算性能的好方法,比如哈夫曼编码,数据挖掘的K-means,isodata等,这些算法都不是太常用,但是在算法领域都是比较知名的,在数据中心的各种软件应用系统中也很常见。

本文简单介绍了数据中心最常用的一些数据分析算法,本意就是希望对数据中心里软件对提升数据处理效率的作用和硬件一样不能小视,高性能的数据中心并不意味着一定不断地引进先进的计算设备,优化软件处理算法往往可以让数据中心的计算效率有质的提升。