互联网信息化技术高速发展,企业生产过程中产生的数据量呈指数级上升。我们看一组统计:
单位换算如下:
1GB = 1024 MB 1TB = 1024 GB 1PB = 1024 TB 1EB = 1024 PB 1ZB = 1024 EB 1YB = 1024 ZB 1BB = 1024 YB 1NB = 1024 BB 1DB = 1024 NB
对普通人来讲,TB算是一个能理解的数据量级,谁还没10来个TB的硬盘或网盘。PB也就1024个TB,也还行,一个普通人,终其一生,把其所有的音乐、视频、图片、文件加起来可能都不会把一个PB给用完。
1PB到底有多大?假如手机播放MP3的速度为平均每分钟1MB,而1首歌曲的平均时长为4分钟,那么1PB存量的歌曲可以连续播放2000年。当然,这里有点夸大,按每分钟10M来算,即歌曲都粗略换成无损歌曲,1PB存量的歌曲也可以连续播放200年,也就是,普通人是没那个命去听完1PB音乐的。1PB 也相当于50%的全美学术研究图书馆藏书咨询内容。
1EB是1024个PB,无损歌曲直接给你播204800年,播起来就是真正的没完没了。基本上,要对PB级以上的数据进行一些联机分析,数据挖掘等就是大数据领域需要解决的问题。传统的事务型数据库并没能力在秒级内运算如此海量的数据。
事实上随着关系型数据库分布式技术的成熟,通过数据水平+垂直分片集群等技术,不存在数据量大到无法处理的情况。因为水平+垂直分片理论上可以无限扩容。既然如此,为何还出现了Hadoop、Kudu、Spark等大数据处理框架?关键还是处理时间问题,比如我们将万亿订单数据通过地区+用户ID分片片键对数据进行水平划分,这些一来,数据量无论有多大,查询某个地区某个用户的订单数据的效率不会随着数据规模增大而变慢的。但是如果需求改成,统计所有订单产生的总销额,此时相当于对数据库的全表扫描进行统计,对于分片集群来讲,就是对所有的分片进行全表扫描,然后统计所有分片的统计结果。传统的关系型数据库通常是行式存储,统计某一列数据的和需要扫描所有数据行,得到那列数据再加以统计,在数据量特别大时,效率是极慢的。
以mysql为例,通过B+聚簇索引树将所有数据行组织起来,以索引的根节点开始分裂成不同范围的索引页,根节点保存所有数据页,数据页与数据页之间通过双向的指针连接,在数据页内部是真正的数据行,数据行之间用单向指针连接。这样的数据组织形式,很明显,对于主键查询,范围查询,效率极高,因为数据都在叶子节点,数据节点之间又有指针,想要定位某范围的数据是相对容易的。但对于需要全表扫描统计某一列的和,此时不得不扫描过所有数据,其效率可想而知。
此时,为解决此类问题,一些列式存储数据库开始出现并广泛应用。这类数据库侧重于统计,决策等场景,也称为联机分析处理(Online Analyze Process,OLAP)数据库,此类数据库处理的数据量通过在PB级以上。而上面提到的事务型数据库通常也称为联机事务处理(Online Transaction Process,OLTP)数据库。当然OLTP数据库单库能处理的数据量通常是GB级。不管是哪种类型的数据库,其最终扩容必然是数据的垂直和水平分片。
大数据(big data),或称巨量资料,指的是所涉及的资料量规模巨大到无法透过主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。
大数据是数据集合,信息资产,当这些数据集合大到常规数据库处理软件(如关系型数据库mysql、oracle、DB2等)无法处理,或说难以处理时,此时我们可以认为这类数据为大数据,当然,数据量巨大不过是大数据的一个基础特征,它还具有其它的一些特征。
IBM提出大数据5V特征:Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。
大数据可以应用到诸多领域,如仓储物流、电商零售、汽车、物联网、电信、生物医学、人工智能、智慧城市等等领域,包括在疫情防控战中,大数据技术也发挥了重要的作用。应用场景是人想出的,大数据几乎可以应用到任何领域,上面提到的不过是目前应用得相对成熟的领域而已,大数据具有无限可能,等待人们去发掘。