大数据技术体系 && NoSQL数据库的基本原理
1、NoSQL产生的原因
目前关系型数据库难以应对日益增多的海量数据,横向的分布式扩展能力比较弱,因此构建出非关系型数据库(所谓的NoSQL),其目的是为了构建一种结构简单、分布式、易扩展、效率高且使用方便的新型数据库系统。
2、NoSQL特点
NoSQL一般提供数据的分布式存储、数据表的统一管理和维护、以及快速的分布式写入和简单查询能力等。
- 一是流行的NoSQL软件满足业务需求而生
- 二是知名的NoSQL软件都是开源
3、NoSQL的典型应用场景
- 海量日志数据、业务数据或监控数据的管理和查询
- 特殊的或复杂的数据模型的简化处理
- 作为数据仓库、数据挖掘系统或OLAP系统的后台数据支撑
数据仓库:企业管理和决策中面向主题的、集成的、与时间相关的、不可修改的数据集合。
数据仓库可以从多个数据源收集经营数据,并且将数据进行预处理,如清洗、提取和转换等操作,将数据转换成统一的模式。处理后的数据会根据决策的需求进行组织,形成面向主题的、集成化的、较稳定的数据集合,数据内容则反映了经营和业务的历史变化
数据挖掘:从大量数据集中发现有用的新模式的过程。
OLAP:联机分析处理,OLAP可以看作是一种基于数据仓库系统的应用,一般面向决策人员和数据分析人员,针对特定的商务主题对海量数据进行查询和分析等
OLTP:联机事务处理,即利用传统关系型数据库实现的、基于事务的业务系统。
数据库:数据信息的集合,按照数据结构来存储和组织信息数据的软件容器或仓库
4、关系型数据库与NoSQL的区别
- 关系型数据库能够更好地保持数据的完整性和事务的一致性,以及支持对数据的复杂操作
- 非关系型数据库在分布式环境下对数据的简单管理和查询
5、大数据的技术体系
5.1 特征
主要包含几个特征:大容量、多样化、高速率、有价值、数据全在线
- 多样化:大数据业务可能需要对多种数据类型进行处理,同时来自不同的业务系统,数据格式不同、不同的领域。也可以对半结构化(例如日志)和非结构化数据进行处理(例如照片和视频等)
- 大容量:数据总量大,新兴的互联网业务。
- 高速率:数据增长快且数据持续增长。
- 有价值:对大数据进行查询、统计、挖掘会产生很高的价值。
- 数据全在线:全部的数据都处在可以被使用的状态,而非离线备份的状态。
5.2 采集
大数据采集的过程:把原始数据加载到分布式的大数据管理系统的过程。有2种采集的方式:
- 在线采集:直接监视数据源的变化,以实时或准实时的方式将产生的新数据获取,并装载到大数据系统中。装载的过程:推模式或拉模式,即数据分发服务主动查看数据变化并获取数据
- 离线采集:定期将数据从数据源上传到大数据系统中的方式。
5.3 存储
采用的是分布式架构,并支持通过网络方式访问。
- DAS:直连式存储,存储设备是通过电缆直接连到服务器
- NAS:网络接入存储,存储设备连接到网络中,通常是标准的TCP/IP网络。客户端通过网络文件存取协议(NFS)存储数据
- SAN:存储区域网络,存储设备组成单独的网络,大多利用光纤连接。
- 云存储:将存储作为服务提供出来。
云存储的优势:
- 用户不再需要购买存储设备与管理软件,而是通过易用化的网络接口租用存储服务
- 用户不再需要对存储系统进行运维,而是通过付费让云存储服务提供商进行数据备份和系统维护
云存储常见类型
- 对象存储:数据放入容器,客户端利用http或restful等应用层接口分别访问元数据和数据块
- 文件存储:基于云模式实现的NAS服务,即可租用、免维护的网络文件系统服务
- 块存储(卷存储):可以实现在云主机中挂载一个虚拟盘符的功能(例如将一个存储卷映射为windows主机下的虚拟D盘),以及云主机镜像和快照存储等功能
- 键值对存储:在云平台上直接实现键值对形式的NoSQL数据库,免安装、免维护、用户可以直接使用
- 数据库存储:在云平台上直接实现的关系型数据库
- 快照存储和镜像存储:在云平台上的虚拟机镜像和实例快照进行存储。一般是基于块存储实现
- 消息队列存储:异步消息是分布式系统中的一种重要通信方式。消息的发送者一般会将消息发送到一个可靠的存储容器,并等待接收者收取该消息。
5.4 大数据的管理和使用
原因:将数据汇总到一处,很难实现且效率低下。
遵循“计算本地化”策略,所谓计算本地化,首先需要将数据存储在多个网络节点之上,各个节点既是存储节点也是处理节点 。
查询和处理数据时,将查询指令或处理数据所需的程序分发到各个节点,每个节点只处理或分析一部分数据,最好是本节点的数据。程序随数据移动的并行处理的方式,在较短时间内完成了处理任务。
NoSQL系统会自行实现分布式存储,例如MongoDB系统;HBase系统基于HDFS分布式文件系统构建,并将所有文件操作交给HDFS,自身只负责数据库表的操作。
大数据的存储和管理实现了文件方式的大数据管理,但对大数据的使用存在困难,无法直接看出数据结构和关系,没有库表的概念。
NoSQL等工具会对大数据实现表格化管理、快速查询支持,以及提供数据库系统的集群的监控、扩展等维护管理功能。
NoSQL在大数据业务中的基本功能就是实现:分布式数据组织、管理和分布式数据查询,有两种方式。
- 第一种是半结构化存储的大数据文件映射为表,即对文件进行纵向分割,对每个列定义其名称和属性,将这些名称属性作为元数据管理起来,即实现表格化管理。由于是分块存储,映射成表后,也可以实现分布式查询
- 第二种是要求数据按照自身所规定的格式进行存储,可能需要通过数据导入等方式将原始数据按照新的格式重新存储一遍
分布式环境下大数据可以的操作:预处理、数据统计分析、数据挖掘
预处理工具:Hadoop的MapReduce模块、Spark
大数据挖掘和机器学习引擎:hadoop的Mahout、Spark的Mlib、谷歌的TensorFlow
6、数据可视化
从形式上可以大致分为统计图形和主题图两类
7、大数据安全和治理
7.1 身份管理和访问控制
- 身份管理:对用户身份(凭证)的管理和身份认证。
- 访问控制:指按照用户的身份或属性来限制和管理用户对资源的访问权限
大数据场景下,数据存储在集群环境中,且集群节点随数据增长而添加。除了要解决客户端访问集群时的认证授权问题,还要解决集群间各节点的认证授权问题,以防止攻击者冒充某个服务节点。NoSQL数据库提供了基于用户名口令的认证与授权方式,实现客户端到服务器的认证授权,Hadoop等大数据系统提供了Kerberos认证的身份管理和权限管理,一方面提供对客户端的身份认证,另一方面提供节点或组件之间的身份认证
7.2 大数据加密
主要包括传输加密和存储加密
- 数据存储加密,常见的策略是将加密的数据上传到存储平台,使用时下载到本地再解密
- 传输加密,不仅要解决加密算法的问题,也要解决秘钥传输和身份认证等一系列问题,通过SSL协议和数据分块后进行透明加密等方式解决这些问题
Hadoop目前采用SSL协议和数据分块后进行透明加密等方式
隐私保护和准标识符保护
8、关系型数据库的原理简述
8.1 关系模型
数据模型是对现实世界的抽象。关系型数据模型中将现实世界定义为实体[eg:一个学生]、实体集[eg:全体学生]、实体类型[eg:集合]、实体标识符[eg:学生的学号]、联系(关系、元组、列)。
8.2 关系型数据库的完整性约束
有域完整性、实体完整性、参照完整性、用户定义的完整性。
8.3 关系型数据库的事务机制
并发:多个用户同时存取数据的操作。关系型数据库会对并发操作进行控制,防止用户在存取数据时破坏数据的完整性,造成数据错误。
事务机制可以保障用户定义的一组操作序列作为一个不可分割的整体提交执行。
8.4 关系型数据库的分布式部署
常见的关系型数据库一般部署在单个主机上。
1、一种常见的关系型数据库的分布式部署方式称为读写分离机制。
2、分布式部署可以通过分库和分表等方式,将大数据集分割成小的数据集,并且将分割后的数据集分布在不同硬盘或主机上,实现有限度的负载均衡。
3、分布式部署可以通过开发分布式中间件。用户可以在不同主机上分别部署成熟的关系型数据库产品,中间件根据设计策略将数据分别部署在各个主机上,各主机上的关系型数据库只管理自身存储的数据。中间件实现集群管理、统一访问、水平分片以及分布式故障恢复等功能。
9、分布式数据管理的特点
9.1 数据分片
为了处理大数据业务,NoSQL数据库可能运行在分布式集群上,通过增加节点的数量实现分布式系统的横向扩展。
目前采用的是服务器与虚拟服务器作为节点,利用局域网和TCP/IP实现节点之间的互联,即集群一般不会跨数据中心、通过广域网链接。
将数据均匀分布到各个节点上,充分利用各个节点的处理能力、存储能力、吞吐能力,可以利用各个节点实现多副本容错等。存在的问题:数据管理、消息通信、一致性、如何实现分布式事务。
数据分布到多个节点上,执行查询操作时,各个节点可以并行检索自身的数据,并将结果进行汇总。为了实现并行检索:
- 1、数据被统一维护、分布存储
- 2、数据是均匀存储的,及数据平均分布在所有节点上,也可以根据节点性能进行调整
数据分片(数据分块):将数据打散,实现均匀分布的做法。目的:将大数据集切分成小的数据集,并均匀分布到多个节点上。
可以通过对分片大小、分片算法等策略进行配置;但分配功能是自动实现的,包括:分片边界、存储位置等信息的维护。根据写入数据的特征,决定数据该归属哪一个分片,并将数据写入负责该分片的节点。
数据分片后,NoSQL实现两种机制:一是一次写入多次读取、二是保持数据块(分片)中的记录是有序的。此外,还可能对数据块使用索引或过滤机制,比如布隆过滤器
9.2 数据多副本
分布式集群存在两个方面的问题:局部网络故障、少量节点故障。
- 局部网络故障:有暂时的网络拥塞或网络设备的损坏等
- 少量节点故障:有节点的暂时故障或存储数据的永久损失
NoSQL支持多副本,即将一个数据分片复制为多分,并复制到多个节点上,当少量节点故障或局部网络故障时,可以通过访问其他副本,使数据保持完整,对数据的查询和数据处理任务能够正确返回所有结果。
数据多副本存在问题:存储策略问题和如何实现多个副本的复制,且内容相同
- 1、当用户发起写入和修改时,可以向任意副本写入,还是只能写入指定副本?
- 2、所有副本状态一致,才判断写入成功,还是一个副本写入成功就判断写入成功?
- 3、在数据复制、同步的过程中出现故障,会造成副本不一致?
- 4、用户读取数据时,是否需要对比不同副本之间的差异?
9.3 一次写入多次读取
- 一是通过弱化数据更新和删除操作,是NoSQL在查询性能、数据持续分片能力和数据多副本。
- 二是提高机械磁盘的IO性能和可靠性。
9.4 分布式系统的可伸缩性
原因:数据强调数据持续采集、数据全在线,因此分布式系统集群出现容量和性能瓶颈问题。通过采用横向扩展的方式解决可伸缩性的问题,通过增加节点的方式提升集群的数据存储和处理能力。
需要解决的问题:
- 1、更新节点状态
- 2、数据重新平衡
- 3、对业务影响小
NoSQL数据库:面向传统关系型数据库难以支撑的大数据业务
- 数据结构复杂
- 数据量大
数据量大,必须采用分布式系统而非单击系统支撑,分布式系统存在的问题:
- 1、如何将多个节点上的数据进行统一的管理。
- 2、如何尽可能地将数据进行均匀的存储。
- 3、如何增加节点或减少节点,如何使整个系统自适应。
- 4、考虑到节点和网络可能发生错误,如何确保数据不丢失,查询结果没有缺失。
- 5、如何尽可能提高数据管理能力和查询效率,如何尽可能提高系统的稳定性。
- 6、如何提高系统的易用性,使用户在无需了解分布式技术细节的情况下,使用NoSQL的数据库系统。
解决上述问题,NoSQL数据库通过降低系统的通用性,以及牺牲关系型数据库中的某些优势特点,以换取在分布式部署、横向扩展、高可用性等方面的优势
10、分布式系统的一致性问题
10.1 CAP原理
在分布式系统中,CAP三个特性不可兼得,只能同时满足两个。
CAP是指分布式系统中的一致性、可用性、分区容错性(Consistency、Availability、Partition Tolerance)
10.2 BASE和最终一致性
基本可用:Basically Available,允许分布式系统中部分节点或功能出现故障的情况下,系统的核心部门或其他数据仍然可用
软状态/柔性事务:soft-state,允许系统中出现中间状态,在NoSQL中暂时出现多个副本暂时的不一致情况
最终一致性:允许系统的状态或者多个副本之间存在暂时的不一致,但最终总会变得一致
10.3 Paxos算法简介
基于消息的一致性算法
11、NoSQL的常见模式
11.1 键值对存储模式
Key-Value模式,数据表中的每个实际行只有行键和数值两个基本内容。适合按照键对数据进行快速定位,还可以通过对键进行排序和分区,以实现更快速的数据定位。
在分布式集群中,可以根据键将数据分块部署在不同节点上,这样可以实现并行的数据遍历
场景:Redis、levelDB
11.2 文档式存储模式
采用Json或者类似Json的方式描述数据,强调可以通过关键词查询内部的结构,而非只通过键来进行检索
场景:MongoDB、CouchDB等
11.3 列存储模式
面向列的存储模式,以区别于关系型数据库中面向行的存储模式,主要用于OLAP、数据仓库等场合
11.4 图存储模式
节点的ID和属性,节点之间的连线(或称边、关系),边的ID、方向、属性。
图存储可以用在搜索引擎排序、社交网络分析和推荐系统等领域。
常见的图存储数据库:Neo4J以及Spark
12、NoSQL系统的其他相关技术
12.1 分布式数据处理
大数据的处理和计算包括数据预处理、数据统计分析和数据挖掘等方面.
过程:将数据进行分割,其次是任务的调度、监控和管理,最后是分布式任务的执行.
- 数据分割:Hadoop 和spark 等分布式大数据处理引擎利用分布式文件系统实现数据切割,但也可以自己控制每个节点每次处理所读入的数据量
- 任务的调度、监控和管理:任务的管理者需要将处理任务分解,指示每个节点处理子任务,同时还要在各个子节点撒花姑娘根据性能和任务分配子任务处理所需的CPU和内存资源并且监控各个节点和子任务的状态,对出错的节点或子任务采取措施。常见的分布式任务调度模块有Hadoop中的Yarn,以及Mesos等。
- 任务的执行:分布式处理引擎需要考虑如何充分发挥分布式计算优势,并且向用户提供简化的接口,摒弊底层分布式处理细节。
12.2 时间同步服务
通过NTP(Network Time Protocol)等方式实现时间同步
12.3 布隆过滤器
目的:检查某个元素是否存在于集合(如数据块)中
在NoSQL系统中,如HBase、Cassandra和MongoDB等,都采用了布隆过滤器机制