NoSQL数据库原理(第2版·微课版)
上QQ阅读APP看书,第一时间看更新

1.2 大数据与NoSQL

大数据(Big Data)是以容量大、类型多、存取速度快、应用价值高为主要特征的数据集合,正快速发展为对数量巨大、来源分散、格式多样的数据进行采集、存储和关联分析,从中发现新知识、创造新价值、提升新能力的新一代信息技术和服务业态。(来自《促进大数据发展行动纲要》。)

1980年,美国作家阿尔文·托夫勒在所著的《第三次浪潮》(The Third Wave)中预测了“信息爆炸”所产生的社会变革,并称之为“第三次浪潮的华彩乐章”。从20世纪90年代开始,“数据仓库之父”比尔·英曼(Bill Inman)以及SGI公司的首席科学家约翰·R.马什(John R. Mashey),都开始使用大数据这个名词。

当前,大数据已经获得全球政府和各行各业的广泛关注。美国在2012年发布的《大数据研究和发展计划》旨在提高从大型复杂数据集中进行价值挖掘的能力。欧盟、英国、日韩等也相继发布了自己的大数据战略规划。

2015年5月,我国首次明确对大数据产业进行规划,同年9月,国务院印发了《促进大数据发展行动纲要》,指明我国大数据发展的主要任务是:加快政府数据开放共享,推动资源整合,提升治理能力;推动产业创新发展,培育新兴业态,助力经济转型;强化安全保障,提高管理水平,促进健康发展。

1.2.1 大数据的特征

大数据并非单指很多的数据(很多的数据可以用“海量数据”一词来描述),也没有明确的分类方法指出大于某个阈值的数据量可以称为大数据。目前,公认的大数据具有4个特征,即IBM公司总结的“4V”。

(1)大容量(Volume):即数据总量大。一般认为,大数据业务所涉及的数据量可以达到几百GB,甚至TB(1024 GB)和PB(1024 TB)等级。

(2)多样化(Variety):即大数据业务可能需要对多种数据类型进行处理,这些数据可能来自多个业务系统,数据格式有所不同,或者是不同领域的数据,例如当我们搜索附近的评价好的餐厅时,提供服务的网站既需要处理位置数据也需要处理评分数据,以实现根据地理位置和用户评价的综合排序。此外,多样化表示大数据业务可以对半结构化数据(例如日志)和非结构化数据(例如照片和视频等)进行处理。

(3)高速率(Velocity):即数据增长快且数据持续增长。常见的大数据业务领域,如互联网、电信、金融等,都会持续进行业务处理和交易,期间会持续产生大量的业务数据,这些数据陆续被采集到大数据系统中,这个过程不一定是实时的,但大多是持续的。大数据业务还需要根据业务需求及时更新、处理数据,例如搜索引擎,需要持续地采集网页数据,不断进行数据分析和处理,并且要在几ms内对数据索引进行扫描,向用户反馈结果。

(4)有价值(Value):对大数据进行查询、统计、挖掘会产生很高的价值,但大数据通常被认为价值密度较低,即挖掘价值的过程较为困难。困难之处一方面在于对巨量异构数据进行处理的难度;另一方面在于可能缺少合适的算法,这些算法除了需要良好的效果之外,还需要能够支持并行化等处理模式。

在上述特征之外,有人还提出大数据应具有数据全在线(Online)和全集数据等特征。数据全在线即全部的数据都处在可以被使用的状态。全集数据强调使用全部数据而非局部的、抽样的数据,这可以减小由于数据稀疏或不当抽样带来的统计学偏差。在这种观点的影响下,人们需要将大数据装进数据库里,而非离线保存,这使得NoSQL在大数据领域产生了重要价值。

1.2.2 大数据场景中的NoSQL

大数据在技术上,具有数据采集、数据存储和管理、数据查询、数据处理、数据分析和可视化展示等多个环节,不同环节可能需要不同的大数据工具。考虑到数据量大、数据持续增长等因素,大数据工具必须支持以集群方式构建——特别是在数据存储和管理、数据查询、数据处理环节。

由于在分布式环境下,可能出现节点故障、网络故障,以及产生传输瓶颈等问题,此外还需要处理横向扩展、负载均衡等问题,因此集群系统的建设难度远大于单机系统。而充分发挥集群性能、屏蔽分布式环境的复杂性,向用户提供易用接口是所有大数据工具的必备特性。

很多NoSQL系统均可以实现集群化部署,并将大数据均匀分布到多个节点之上,通过分片、多副本等机制实现负载均衡和高可靠性,提供高效率的分布式查询能力,以及通过横向扩展存储更多数据等能力。同时,NoSQL大多能提供易用接口,例如:利用Shell脚本或类似SQL语句的方式完成数据增、删、改、查操作,以及提供专门工具来进行分布式集群的部署和维护等。

总之,大多数NoSQL系统都是典型的大数据系统。NoSQL系统的分布式设计、易用性设计和接口设计等,均能够很好地满足大数据领域的业务要求和性能要求,可以用在大数据的存储、管理和查询等阶段。但NoSQL的数据处理、统计与分析能力通常较弱,可能需要和其他大数据工具配合使用,来解决这一问题。例如:著名NoSQL系统HBase本身不负责底层数据的存储,只负责数据表的管理和查询。HBase会将数据交给HDFS(Hadoop Distributed File System,Hadoop分布式文件系统)进行管理,自身只负责数据库表的操作,需要读写文件时则调用HDFS接口。

HBase也没有数据处理功能,它向上提供数据接口,使得MapReduce等大数据处理框架可以对数据进行存取和处理。而HBase、HDFS和MapReduce具有相似的结构,均可以支持“计算本地化”策略(参见2.5.1节),因此彼此之间既可以独立工作,也可以很好地配合使用。

1.2.3 NoSQL的典型应用场景

NoSQL可以作为数据库应用于业务系统当中,也可以作为数据仓库应用于数据统计与挖掘系统当中,且一般应用于数据量巨大,以及数据异构、数据结构复杂等情况下。NoSQL的典型应用场景如下。

(1)网站或网络应用系统中的数据存储或缓存。

例如,互联网中的网页和链接可以看作点和线的关系,这样可以把互联网中网站和网页的关系抽象为有向图。NoSQL中有一类“图数据库”,专门对这种数据结构进行了优化。

又比如,股票数据中所谓的“F10”数据,即企业背景信息,该信息包含相对静态的企业概况信息,也包含动态的公告信息、股本结构变动信息等。这些背景信息的格式是不确定的、变化的,而且数据格式之间可能存在列的嵌套等情况。这种数据结构虽然也可以用关系模型描述,但采用NoSQL的文档型模型描述,则会更加简单、易用。此外,在互联网系统中,为了提升查询速度,可能需要将大量表格数据缓存到多台服务器的内存当中,而一些基于键值对的NoSQL,例如Redis、Memcached等,就提供了集群化的数据缓存功能。

(2)海量日志数据或监控数据的管理、查询和统计。

例如,管理电商网站或App的用户访问记录、交易记录,采集并管理工业物联网中的数据采集与监视控制系统(Supervisory Control And Data Acquisition,SCADA)数据。这些数据一般会被持续采集,不断累积,因此数据量极大,可能无法通过单机管理。另外,这些数据的数据结构简单,且缺乏规范,例如,从不同业务服务器或不同工业设备所采集的数据的数据格式可能是不同的,这使利用关系型模型描述数据变得困难。NoSQL采用键值对、无模式的数据模型处理这类数据会简单一些。

此场景和第一种场景的差别在于,这些数据不是对最终用户可见的,而是由运维或运营人员处理的。并且除了进行一般查询之外,还会大量进行数据聚合和统计操作,甚至在预处理后进行机器学习等操作。

(3)作为OLAP/OLTP系统的数据支撑。

联机分析处理(Online Analytical Processing,OLAP)可以看作一种基于数据仓库系统的应用,一般面向决策人员和数据分析人员,针对特定的商务主题对海量数据进行查询和分析等,其中查询主要和检索能力有关,分析则可能需要遍历数据,常用于“分组求和”等数据聚合场景。

OLAP业务还可能延伸出数据挖掘业务。数据挖掘是从大量数据集中发现有用的新模式的过程。数据挖掘可能会通过机器学习算法进行,例如k均值、逻辑回归等。在大数据领域,数据挖掘通常也是分布式实现的。

NoSQL通常可以提供强大的检索能力,此外大多也能提供数据遍历能力和简单的数据聚合能力,这意味着NoSQL系统一般能够完成基本的OLAP业务。但NoSQL通常缺少数据预处理能力和对复杂机器学习算法的支持。一般需要将NoSQL与MapReduce、Spark等分布式处理框架结合使用,从而实现数据的复杂聚合和数据挖掘等。

与OLAP相对的概念是联机事务处理(Online Transaction Processing,OLTP),即业务系统中的数据处理,主要会对数据进行增、删、改,以及事务处理等。传统的NoSQL一般能够提供基本的增、删、改操作,但可能无法支持复杂的OLTP业务,主要是由于在分布式架构下缺乏有效的事务机制,以及数据频繁更新时,系统的处理性能较差。但当前一些新型或新版本的NoSQL系统通过改进设计,逐步提高了OLTP性能,并开始支持分布式事务。