✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。
我是Srlua,在这里我会分享我的知识和经验。🎥
希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮
记得先点赞👍后阅读哦~ 👏👏
📘📚 所属专栏:数据库
欢迎访问我的主页:Srlua 获取更多信息和资源。✨✨🌙🌙
目录
目前“大数据”( Big data)已成为一个炙手可热的名词。从表面上看,其表示数据规模的庞大,但仅仅从数据规模上无法区分“大数据”这一概念和以往的“海量数据”(Massive data)和“超大规模数据”(Verylarge data)等概念的区别。
然而,至今仍没有一个对“大数据”公认的准确定义。
根据维基百科的解释,大数据指的是数据规模巨大到无法通过目前主流的软件工具在合理时间内完成处理的数据集。由此可见,随着时间的推移,计算机的计算能力、存储能力会不断提升,因此大数据的含义也会不断演化。
今天所说的大数据在未来可能就不算“大”了,但那时也一定仍会存在更大的数据是当时的技术处理不了的,因而仍会被称为大数据。可见,如何驾驭大数据将会成为人们长期需要面对的数据常态。
大数据体现在数据量极为庞大,其计量单位可以是 TB 级、 PB 级甚至更大的计量单位。
大数据呈现出高速增长的态势,而且产生速度仍在不断加快。
大数据包含多种多样的数据类型,既可以是存储在二维表中的结构化数据,也可以是文本、视频、图像、语音、图(Graph)、文件等非结构化数据。
大数据中蕴藏着巨大价值,但价值密度低。通过对大数据进行合理的分析,能够从中挖掘出很多有价值的信息,这些信息将有助于提高社会生产效率,提升人们生活质量,或者创造更大商业价值。
随着大数据时代的到来,传统关系型数据库的发展面对大数据时代的数据管理需求越来越力不从心,主要体现在:
在大数据时代,短短的 1min 时间内新浪微博可以产生 2 万条微博,苹果可以产生 4.7 万次应用下载记录淘宝则可以卖出 6万件商品,百度可以产生90万次搜索记录。可见对于上述公司而言很快就会积累超过10亿的数据量。然而,由于关系模型严谨得过于死板,例如复杂的事务处理机制就成为了阻碍其性能提升的桎梏,使得传统关系型数据库在一张包含10 亿条记录的数据表之上进行 SQL查询时效率极低。
关系型数据库存储的是清洁规整的结构化数据,然而在大数据时代,数据种类繁多,包括文本、图片、音频和视频在内的非结构化数据所占比重更是超过了90%,这无疑是关系型数据库所不能应对的。
传统关系型数据库由于自身设计机理的原因,通常很难实现性价比较高的“横向扩展”,即基于普通廉价的服务器扩充现有分布式计算系统,使系统的处理能力和存储能力得到提升。而“横向扩展”是大数据时代计算和存储的重要需求。
大数据时代诸如购物记录、搜索记录朋友圈消息等信息都需要实时更新,这就会导致高并发的数据访问,可能产生每秒高达上万次的读写请求。在这种情况下,传统关系型数据库引以为傲的事务处理机制和包括语法分析和性能优化在内的查询优化机制却阻碍了其在并发性能方面的表现。
NOSQL数据库根据所采用的数据模型的不同,可以分为以下四大类:
键值存储(Key-Value Stores):这类数据库以键值对的形式存储数据,每个键对应一个值。它们通常提供高性能的存储和检索,因为数据可以根据键进行快速读写操作。例如Redis和Amazon DynamoDB就是典型的键值存储数据库。
列存储(Column Stores):列存储数据库按列而不是按行来存储数据,每个列族包含多个列,可以独立地进行读写操作。这种数据库适合需要查询大量数据的场景,比如用于OLAP(联机分析处理)和数据分析。Apache Cassandra和Apache HBase是常见的列存储数据库。
文档数据库(Document Databases):文档数据库以文档为单位存储数据,通常采用JSON或类似格式来表示文档。它们适用于存储结构化和半结构化数据,并能高效地完成复杂查询。MongoDB和CouchDB是广泛使用的文档数据库。
图形数据库(Graph Databases):图形数据库使用图形结构来表示和存储数据,数据以节点和边的形式组织,节点代表实体,边代表实体之间的关系。图形数据库适合处理复杂的关系数据,如社交网络和知识图谱。Neo4j和Amazon Neptune是常见的图形数据库。
总结:这四种类型的NoSQL数据库各有特点,它们解决了传统关系型数据库在某些应用场景下的局限性,为大数据处理、实时 web 应用等提供了更灵活、可扩展的解决方案。
NOSQL数据库不受关系模型约束,具有较好的扩展性,很好地弥补了传统关系型数据库的缺陷。但NoSQL数据库并没有一个统一的架构,每一类 NOSQL数据库都有各自适用的场景。同时NOSQL数据库不能严格保证事务的 ACID 特性,导致数据的一致性和正确性没法保证。而且NOSQL数据库缺乏完备系统的查询优化机制,在复杂查询方面的效率不如关系型数据库。为此业界又提出了 NewSQL数据库。
NewSQL 数据库是对各种新的可扩展、高性能数据库的简称这类数据库不仅具有 NOSQL对海量数据的存储管理能力,还保持了传统数据库支持事务 ACID 和 SQL等特性。
不同 NewSQL数据库的内部架构差异较大,但是有两个共同的特点:都支持关系数据模型;都是用SQL作为其主要的访问接口。
目前市面上已有的 NewSQL数据库有Spanner、PostgreSQL、SAP HANA、 VoltDB、MemsQL等。
Spanner 是谷歌公司研发的、可扩展的、多版本、全球分布式、同步复制数据库,是谷歌公司第一个可以全球扩展并支持数据外部一致性的数据库。
PostgresQL是很受欢迎的开源数据库,稳定性强,有大量的几何、字典数组等数据类型,在地理信息系统领域处于优势地位。
SAP HANA 基于内存计算技术,是面向企业分析性应用的产品,主要包括内存计算引擎和 HANA 建模工具两部分。
VoltDB 是基于内存的关系型数据库,其采用NewSQL体系架构,既追求与 NOSQL体系架构系统具有相匹配的系统可展性,又维护了传统关系型数据库系统的事务特性和 SQL语言访问特性,在执行高速并发事务时比传统的关系型数据库系统快 45 倍。
MemSQL有符合 ACID 特性的事务处理功能、 SQL兼容性以及高度优化的 SQL存储引擎,提供了与 MySQL相同的编程接口,但速度比 MySQL快 30 倍。
大数据具有数据体量大、产生速度快的特点,因而传统的单机串行处理模式往往难以完成对大数据的高效处理,必须借助并行分布式处理方法。根据大数据应用类型的不同,大数据处理模式分为批处理(Batch processing)和流处理(Stream processing )两种。下面以 Apache的 Hadoop 和 Storm 为例分别介绍批处理和流处理的典型处理模式。
MapReduce执行流程
一个MapReduce 作业(MapReduce Job)的执行流程如下:
1)首先从用户提交的程序创建出 Master进程,Master 进程启动后划分任务并根据输入文件所在位置和集群信息选择机器创建出 Map 进程或 Reduce 进程;
2) Master进程将划分好的任务分配给 Map 进程和 Reduce 进程执行,任务划分和任务分配可以并行执行;
3) Map 进程执行 Map 任务,即读取相应的输入文件,根据指定的输入格式不断地读
4) Map 进程不断往本地内存缓冲区输出中间
5)Map 任务执行完成后向 Master 进程汇报, Master 进程进一步将该消息通知Reduce 进程。 Reduce 进程向 Map 进程请求传输生成的中间结果数据,当Reduce 进程获取完所有的中间结果后,需要进行排序操作;
6)Reduce 进程执行 Reduce 任务,即对中间结果的每一个相同的 key 及 value集合,执行用户自定义的 Reduce 函数, Reduce 函数的输出结果被写入到最终的输出文件。
除了使用 MapReduce 批处理编程框架, Hadoop 的核心内容还包括HDFS (Hadoop Distributed File System, Hadoop 分布式文件系统)
HDFS 是一个高度容错性的系统,适合部署在廉价的机器上。HDFS 能提供高吞吐量的数据访问,适合处理大规模数据集的应用程序。
包含以下几个方面
(1)方便部署。 Hadoop 可以方便部署在由一般商用机器构成的大型集群或者云计算服务之上。
(2)容错健壮。即使集群中的计算机硬件频繁出现失,Hadoop也能够处理大多数此类故障
(3)容易扩展。 Hadoop 通过增加集群节点,可以线性地扩展以处
理更大的数据集。
(4)使用简单。 Hadoop 允许用户快速编写出高效的并行代码(5)免费、开源。 Hadoop 是一款开源批处理框架,可以免费使用。
Hadoop 的典型应用包括网络搜索、日志处理、推荐系统、数据分析、视频图像分析和数据集成等。
和先存储再处理的批处理模式不同,流处理将源源不断产生的数据视为数据流,每当新的数据到达系统时就立刻对数据进行处理并返回结果。可见,流处理适合包括网页点击量统计、股票交易数据分析和传感器网络事件检测等实时分析应用。 Apache storm 是一个免费、开源的分布式实时流处理系统。Storm 在流处理中的地位相当于Hadoop 对于批处理的重要地位。
Storm 基于拓扑(Topology)实现对数据流的分布式实时处理拓扑是一个有向无环图(Directed Acyclic Graph),一个典型的 Storm 的拓扑结构。
Topology 中数据以元组(Tuple)的形式进行转发和处理。和Hadoop 中的 MapReduce 作业不同,Storm 的拓扑一经启动将永久运行,不断处理实时到达的数据元组。
一个典型的 Storm 拓扑
Storm 拓扑由 Spout 和 Bolt 两类组件构成。 Spout 作为数据产生者,从一个外部源(例如Kafka)读取数据并并向 Storm拓扑中喷射数据元组。Bolt作为数据消费者,对所接收的数据元组进行处理和转发。
一个复杂的 Storm 拓扑可由多个 Spout 和多个 Bolt 组成,且可以为每个 Spout 或 Bolt 设置其任务(Task)并行度,由多个任务并行完成其处理逻辑。 Storm 提供多种组件间的数据分发策略,例如,随机分组(Shuffle grouping)、按字段分组(Field grouping)、全局分组(Global grouping )和广播发送(All grouping),用以完成 Storm 拓扑中上游组件的各个任务向下游组件的各个任务的数据分发。
包含以下几个方面
(1)易整合: Storm 可以方便与数据库系统进行整合。
(2)易使用: Storm 提供丰富的 API,方便用户的使用
(3)易扩展: Storm 可以方便部署和运行在大规模分布式集群中。
(4)易纠错: Storm 可以自行重启故障节点,并完成对故障节点任务的重新分配。
(5)可靠的消息处理: Storm 保证每个消息都能被系统完整处理。
(6)免费、开源: Storm 是一款开源流处理框架,可以免费使用。
大数据的一个重要特性就是多样化(Variety),这意味着产生大数据的来源广泛、类型庞杂、并经常存在数据冗余和错漏现象,给数据处理带来了巨大挑战。要想处理大数据,首要任务就是对数据源抽取的数据进行合理的集成。
数据集成是指通过访问、解析、规范化、标准化、整合、清洗、抽取、匹配、分类、修饰和数据交付等功能把不同来源、格式、特点、性质的数据在逻辑上或物理上有机地集中,从而为后期数据处理提供保障。数据集成的目的是保证数据的质量和可信性。如果数据集成工作没有做好,会导致整个大数据项目的延期甚至失败。因此,在大数据给人们带来价值之前,必须对其进行合理的集成。
数据分析是整个大数据处理流程中的核心环节,因为大数据所蕴含的价值需要通过数据分析得以实现。传统的数据分析技术包括数据挖掘、机器学习、统计分析等,在用于处理大数据时可能需要进行必要的调整,因为这些技术在处理大数据时面临一些新的挑战,体现在以下几个方面:
大数据价值大(Value)的特性虽然意味着大数据蕴含了巨大价值,但是大数据同时也存在价值密度低的特点,体现在大数据中存在大量的冗余数据、噪音数据、遗漏数据和错误数据。因此,在进行数据分析之前,需要对大数据进行数据清洗、整合等集成工作。然而,对如此大规模的数据进行清洗和整合无疑会对硬件环境和算法性能提出新的要求。
虽然数据分析是大数据处理的核心,但是用户更关注对分析结果的展示。即使分析过程高效、分析结果正确,如果没有通过容易理解的方式给用户展示大数据的分析结果将会大大降低分析结果的实际价值,极端情况下甚至会误导用户。
传统的数据解释方4法是在计算机终端上打印显示分析结果或以文本的形式向用户呈现分析结果。然而,大数据的分析结果往往规模大而且结果之间的关系错综复杂,因而传统的数据解释方法不适用于解释大数据的分析结果。
目前,业界推出了很多数据可视化技术,用图表等形象的方式向用户展现大数据的分析结果。常见的数据可视化技术包括标签云(Tag cloud)、历史流(History flow)和空间信息流(Spatial information flow)等。
希望对你有帮助!加油!
若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!