大量数据处理

上次谈到我听过一位来自优酷的高级架构工程师讲课,今天下午有幸又蹭听了半个多小时。由于去的晚了,记得不完全,有错误的地方还请批评指正!

所谓大量数据,我这里指的是通过网络爬虫等方式获取的大量的目标数据。比如歌曲,我们通过在各大音乐站点抓取到大量的MP3的实际下载地址,数据假设有好几百万。首先需要做的就是对他们进行数字化。我在之前的文章里已经提到过,就是一个数字化的过程。具体操作是对每一条数据进行MD5加密:采用128位算法,去掉前后各32位,还剩64位,确保唯一性(这个貌似可以放心,据说每60亿个才有1-2个重复)。然后我们可以把这些经过数字化的数据存入数据库,或者直接以文件的形式存入磁盘。命名形式为"hash.dat"。

上次,老师就讲到以上的部分,我根据我的理解拿别的东西举个例子,希望没有较大的错误。接下来就需要进行排除重复的工作了。由于我们已经进行了数字化的工作,并且用的是MD5加密算法,所以排重工作会稍微简单一点。因为,相同的数据经过MD5加密后,得到的hash值是一样的,所以这一步比较容易。但是,为了数据的精确性,我们需要在MD5加密前,进行一些辅助性的工作。比如,对原始数据去除各种符号,比如“标点符号、空格、制表符”等各种容易影响数据精确度的其他符号,然后我们将得到的 串 进行MD5加密。甚至在这一步我们可以自定义 串 的格式。

得到大量的数字化后的数据后,如果采用小文件的方式存储在磁盘上,有一个小技巧。由于是百万级的数据量,所以我们采用多块硬盘存储。假如有四块,我们可以用MD5后的hash值是64位无符号int类型的特性,对它模4,然后分别根据结果存入编号为0、1、2、3的四块硬盘中。当然,这样做的前提是运行在服务器上,否则普通的PC难以承受如此之多的文件操作。

我今天大概就听了这么多,记到笔记本上的我都写出来了。希望批评指正!

添加新评论