数据存储的压力和数据表示的难题

字数:2078

摩尔定律固然使得存储的成本大幅下降,但是当大数据出现后,数据量增长的速度可能超过摩尔定律增长的速度。首先,很多原来不打算存储的数据被存了下来,比如我们前面提到的很多情况。而有些产品产生的数据多得惊人,比如有了Google眼镜,就有可能将人一辈子看到的事情全部记录下来,如果这件事做成了,会彻底改变我们对世界甚至对自己人生的了解。但是,将这些视频(包括音频)数据都存下来可不是件容易的事情。Google为街景地图服务的汽车每天产生的原始数据量更是大得惊人,每辆车每天产生的数据就是1TB,假如一份数据存三个拷贝,一年下来就是1PB90。即使用当今最大容量的10TB硬盘来存,也需要用100个(当然,数据在处理之后并没有那么大)。

从图5.2中可以看出,数据量增长的速度是高过存储设备发展速度的,越往后,它们之间的差距越大。因此,不能简单地依靠更多地生产和购买设备来解决数据存储的问题,而是需要技术解决方案来提高存储的效率,保证不断产生出来的数据都能够存得下。

目前节约存储设备的技术体现在两方面,第一类技术是存储同样的信息占用的空间小。当然,这并不是简简单单的数据压缩。从信息论的角度讲,就是要去除数据的冗余,但是在去除冗余之时,相应的数据读写处理要做改变。比如在邮件中,同一份附件在所有的邮件中只存一份,就可以大大节省空间,当然这会导致邮件中文件管理系统的改变。再比如,图像的存储由点阵变成向量,也可以大大节省空间,但是这样就要改变图像的读和写的方式。

图5.10 Google拍摄街景的汽车的摄像设备为15个500万像素的照相机

第二类技术涉及数据安全,在这里所讲的数据安全是指数据不丟失、不损坏,而不是指防止数据被盗。在过去,防止数据不丟失的最简单的办法就是多存几个拷贝,放到不同的地点,比如过去AT&T(美国电话电报公司)关于业务的数据就在美国三个不同地区要存三个完整的备份。但是大数据都是存在云端,而且数据量大,也不可能在世界各地存非常多个拷贝,因此需要有特殊的方式保证数据的安全性。Google的文件系统GFS91的设计从一开始就是为了方便存储大数据而进行的。早期的GFS每个文件在一个数据中心需要存3个拷贝,然后同时存放在地理上相距较远的3个数据中心,这样就是9份拷贝。虽然数据是安全了,但是显然并不经济。后来改进成存3+1份,前3份内容相同,最后一份是为了方便校验和恢复信息,内容不同,这样只需要存4份即可,大大节省了存储的空间。

信息存储相关技术并不局限在研究如何节省存储量上,还需要研究怎样存储信息才能便于使用。在大数据之前,人们在设计文件系统和数据存储格式时,主要考虑的是规模较小、维度较少的结构化的数据。到了大数据时代,不仅数据量和维度都剧增,而且因为大数据在形式上并不遵循什么固定的格式,过去需要重新优化数据的格式,按照过去数据特点优化设计的文件系统对大数据的使用未必是高效率的,因此需要重新设计通用、有效和便捷的数据表示方式和存储方式。

我们不妨通过一个例子来说明大数据的存储和过去数据的不同。大数据由于量大,随机的访问就成为一个难题,为了做到这一点,需要对数据建立索引,而过去数据量不大时,索引实际上并非必需的。建立索引对于有些数据并非难事,比如机器系统产生的日志和互联网的网页数据。前者虽然量大,但是每一条记录中字段是清晰的,它们的表示(描述)、检索和随机访问并不是什么大问题。网页的数据虽然显得杂乱一些,但是它们都是通过超链接文本组织起来的,从一个网页就可以找到下一个,而且网页文本的颗粒度都很小(是单词),因此我们很容易通过关键词把它们索引起来。但是到了富媒体数据大量出现时,要想随机访问它们就不那么容易了,比如要想从视频中找出一个画面就非常复杂,因为我们即使找到了视频每一个主帧(main frame),也很难根据那些画面对所有的视频建立索引。当数据量更大,尤其颗粒度更大之后,这就是一个非常难的技术问题了。比如对很多与医疗相关的数据的随机访问就不是那么容易,它们的基本单元动不动就是几百兆、上千兆,用现有的技术来检索它们是不可能的。如果不检索,就无法随机访问,那么使用时在这么大量的数据中找到所需要的,耗时特别长,很不实用。除了医疗,还有很多行业,比如半导体设计、飞机设计制造,它们的数据量都很大,而且很复杂。

图5.11 围棋的棋谱怎么表示能够便于查询和搜索,就不是一个简单的问题

(图为AlphaGo和李世石对弈的第一盘)

大数据面临的另一个技术难题就是如何标准化数据格式,以便共享。在过去,各个公司都有自己的数据格式,它们只在自己的领域使用自己的数据。但是,到了大数据时代,我们希望通过数据之间的相关性,尤其是大数据多维度的特性,找到各种事物之间的关联。回到前面百度知道的那个例子,如果我们能够往前再走几步,将每一个用户的饮食习惯收集起来,通过可穿戴式设备了解他们的生活习惯,然后再和他们的医疗数据甚至是基因数据联系起来,就能研究出不同人、不同生活习惯下各种疾病的发病可能性,并且可以建议他们改进饮食习惯,预防疾病。这个前景看起来很美好,但是要实现它就必须先解决数据的表示、检索和随机访问等问题。显然,对于世界上各种各样的大数据,无法用一个统一的格式来描述,但是大家需要一些标准的格式,以便相互交换数据和使用数据。最早进入大数据领域的Google公司设计了一种被称为Protocol Buffer的数据格式。在Google内部,Protocol Buffer是数据存储的主要格式,也是它所开发的各种软件在进行数据通信时标准的接口。今天,Google已经将Protocol Buffer开源出来供大家使用,旨在便于全世界能够共享数据。

大数据的应用方法和场景与过去使用数据完全不同,这不仅带来了上面所说的在数据存储和表示方面的挑战,也带来了数据处理的挑战,而这些挑战并非简单增加处理器就能够解决的。


数据收集:看似简单的难题并行计算和实时处理:并非增加机器那么简单