主流流处理框架比较

合集下载

大数据学习路线

大数据学习路线

⼤数据学习路线前⾔数据科学部为想从事⼤数据⽅向学习的⼩伙伴总结了⼀下⼤数据的学习路线,供⼤家学习参考。

由于⼤数据是⼀个基础门槛较⾼就业前景较好的学习⽅向。

所以打算学习⼤数据的⼩伙伴要加油啦!⼤数据学习路线:⾸先我要了解⼤数据处理流程:第⼀步:数据收集第⼆部:数据存储第三步:数据分析第四步:数据应⽤数据收集⼤数据处理的第⼀步是数据的收集。

现在的中⼤型项⽬通常采⽤微服务架构进⾏分布式部署,所以数据的采集需要在多台服务器上进⾏,且采集过程不能影响正常业务的开展。

基于这种需求,就衍⽣了多种⽇志收集⼯具,如 Flume 、Logstash等,它们都能通过简单的配置完成复杂的数据收集和数据聚合。

数据存储收集到数据后,下⼀个问题就是:数据该如何进⾏存储?我们通常熟知的就是把数据存⼊MySQL、Oracle等传统的关系型数据库,这些传统的数据库的特点是能够快速存储结构化的数据,并⽀持随机访问。

但⼤数据的数据结构通常是半结构化(如⽇志数据)、甚⾄是⾮结构化的(如视频、⾳频数据),为了解决海量半结构化和⾮结构化数据的存储,衍⽣了 Hadoop HDFS 、KFS、GFS 等分布式⽂件系统,它们都能够⽀持结构化、半结构和⾮结构化数据的存储,并可以通过增加机器进⾏横向扩展。

分布式⽂件系统完美地解决了海量数据存储的问题,但是⼀个优秀的数据存储系统需要同时考虑数据存储和访问两⽅⾯的问题,⽐如你希望能够对数据进⾏随机访问,这是传统的关系型数据库所擅长的,但却不是分布式⽂件系统所擅长的,那么有没有⼀种存储⽅案能够同时兼具分布式⽂件系统和关系型数据库的优点,基于这种需求,就产⽣了 HBase、MongoDB。

数据分析⼤数据处理最重要的环节就是数据分析,数据分析通常分为两种:批处理和流处理。

批处理:对⼀段时间内海量的离线数据进⾏统⼀的处理,对应的处理框架有 Hadoop MapReduce、Spark、Flink 等;流处理:对运动中的数据进⾏处理,即在接收数据的同时就对其进⾏处理,对应的处理框架有 Storm、Spark Streaming、Flink Streaming 等。

国内市场主流专业的工作流(bpm)软件分析、比较及推荐

国内市场主流专业的工作流(bpm)软件分析、比较及推荐

国内市场主流专业的工作流(bpm)软件分析、比较及推荐目前国内外的工作流系统层出不穷,行业标准多种多样,虽然工作流主要功能国内比较知名的工作流软件基本上都具备,但功能的侧重点各不相同,增加了企业对工作流或BPM选型难度,本人选用目前国内市场主流专业的工作流软件,从概念、工作流引擎、工作流过程建模工具、流程操作、工作流客户端架构、流程监控、表单设计器以及与应用程序的集成等方面进行分析和比较,帮助企业对工作流或BPM产品的选型。

一、概述:工作流的思想最先起源于西方国家,一开始的目的主要是为了简化工作流程,为繁琐的工作提供依据。

随着需求的不断延伸以及人们对企业信息化思想的不断普及,工作流越来越受到企业内部的使用推广,当然,工作流能满足的需求也在不断的优化。

工作流概念起源于生产组织和办公自动化领域,是针对日常工作中具有固定程序活动而提出的一个概念,目的是通过将工作分解成定义良好的任务或角色,按照一定的规则和过程来执行这些任务并对其进行监控,达到提高工作效率、更好的控制过程、增强对客户的服务、有效管理业务流程等目的。

尽管工作流已经取得了相当的成就,但对工作流的定义还没有能够统一和明确,不同学者从不同角度对工作流做出了不同的定义。

Georgakopoulos给出的工作流定义是:工作流是将一组任务组织起来以完成某个经营过程:定义了任务的触发顺序和触发条件,每个任务可以由一个或多个软件系统完成,也可以由一个或一组人完成,还可以由一个或多个人与软件系统协作完成。

IBM Almaden Research Center将工作流定义为:工作流是经营过程的一种计算机化的表示模式,定义了完成整个过程需要的所有参数;这些参数包括对过程中每一个步骤的定义、步骤的执行顺序和条件、步骤由谁负责以及每个活动所需要的应用程序等。

1993年工作流管理联盟(Workflow Management Coalition,WfMC)作为工作流管理的标准化组织而成立,标志着工作流技术逐步走向成熟。

大数据分析中的数据流处理技术介绍(十)

大数据分析中的数据流处理技术介绍(十)

大数据分析中的数据流处理技术介绍随着科技的不断发展,数据量不断增长,大数据分析技术已经成为现代社会中不可或缺的一部分。

大数据分析通过对海量数据的处理和分析,可以为企业、政府等各个领域提供重要的决策支持。

在大数据分析中,数据流处理技术扮演着非常重要的角色,它能够实时地处理数据流,从而使得分析结果更加准确和实时。

本文将从数据流处理技术的基本概念、流处理框架、流处理算法和应用实例等方面对大数据分析中的数据流处理技术进行介绍。

数据流处理技术的基本概念数据流处理是指持续不断地处理数据流,而不是一次性地处理静态数据集。

在大数据分析中,数据流处理技术通过对即时到达的数据流进行实时处理和分析,能够更好地把握数据的动态变化,从而对实时决策提供支持。

数据流处理技术的主要特点包括高吞吐量、低延迟、容错性和可伸缩性等。

数据流处理技术主要应用于网络监控、金融交易分析、智能制造等领域。

流处理框架流处理框架是实现数据流处理技术的重要工具,它能够有效地管理和处理数据流。

目前主流的流处理框架包括Apache Storm、Apache Flink和Apache Kafka Streams等。

其中,Apache Storm是一个开源的分布式实时计算系统,具有高吞吐量、低延迟、可扩展等特点,能够支持复杂的流处理任务。

Apache Flink是另一个流处理框架,它支持事件驱动的流处理,并且提供了丰富的API和库,可以方便地进行实时数据分析。

而Apache Kafka Streams则是一个轻量级的流处理框架,它能够实现高吞吐量和低延迟的流处理,同时还提供了容错性和状态管理等功能。

流处理算法流处理算法是数据流处理技术的核心,它能够对数据流进行实时的处理和分析。

常见的流处理算法包括滑动窗口、聚合操作、过滤操作等。

其中,滑动窗口是一种常见的流处理算法,它能够对数据流进行分段处理,从而实现实时的数据分析。

聚合操作则是将数据流中的数据进行合并和计算,用于生成统计结果和报表。

高效处理流式数据的流式计算框架

高效处理流式数据的流式计算框架

高效处理流式数据的流式计算框架流式计算框架是一种能够高效处理流式数据的计算工具,用于实时地处理并分析大规模的数据流。

随着大数据时代的到来,越来越多的数据以流的形式产生,因此流式计算框架变得愈发重要。

流式计算框架的核心目标是能够实时地处理数据,并尽可能地降低计算延迟。

在传统的批处理计算框架中,数据必须等待一定的时间才能被处理,而在流式计算框架中,数据可以立即被处理。

这种实时处理能力为数据分析提供了更加及时的反馈机制,使得决策可以更加快速地做出。

在设计流式计算框架时,有几个关键的考虑因素。

首先是数据的到达速率。

由于流式数据的特性,数据的到达速率往往很快,因此流式计算框架必须具备高吞吐量的能力,能够处理大规模的数据流。

其次是数据的有序性。

在流式计算中,数据的顺序很重要,因为后续的计算可能依赖于前面的数据。

因此,流式计算框架必须能够保证数据的有序性,确保数据按照正确的顺序被处理。

流式计算框架通常由两个重要的组件构成:流式数据收集和流式数据处理。

流式数据收集是指从不同的源收集数据,并将其整合成一个流式数据集。

这需要考虑数据的来源、数据的到达速率以及数据的有序性。

流式数据处理是指对流式数据进行计算和分析,通常采用流水线的方式进行处理。

数据会依次经过多个处理单元,并进行不同的操作,例如过滤、聚合、计算等。

这些处理单元可以并行执行,以提高处理效率。

在实际的流式计算框架中,常见的有Apache Storm、Apache Flink和Apache Kafka等。

其中,Apache Storm是一种分布式实时计算系统,能够以毫秒级的延迟处理大规模的数据流。

它以流的方式处理数据,将数据划分为不同的流组件,并通过消息传递的方式进行通信。

Apache Flink是一种分布式流处理框架,能够以秒级的延迟处理数据流。

它支持流和批处理的模式,并提供了丰富的操作函数和状态管理机制。

Apache Kafka是一种高吞吐量的分布式消息队列,用于处理实时数据流。

概述四种主流的大数据技术(一)

概述四种主流的大数据技术(一)

概述四种主流的大数据技术(一)概述四种主流的大数据技术引言:大数据技术在不断进步和创新的过程中,已经成为当今世界中最重要和炙手可热的技术之一。

它可以帮助企业和组织从海量的数据中提取有价值的信息和洞见,从而支持决策和业务发展。

本文将概述四种主流的大数据技术,包括分布式存储系统、分布式处理框架、机器学习算法和数据可视化工具。

一、分布式存储系统:1. Hadoop分布式文件系统(HDFS):介绍HDFS的基本原理和特点。

2. Cassandra分布式数据库:探讨Cassandra的数据模型和可伸缩性。

3. Amazon S3:说明Amazon S3如何实现高性能、高可靠性的文件存储。

4. Google Cloud Storage:介绍Google Cloud Storage的特点和用途。

5. Apache HBase:探讨HBase的数据模型和应用场景。

二、分布式处理框架:1. Apache Spark:介绍Spark的特点和优势。

2. Apache Hadoop MapReduce:探讨MapReduce的原理和应用。

3. Apache Flink:说明Flink如何支持实时流处理和批处理。

4. Apache Storm:介绍Storm的实时分布式计算能力。

5. Apache Beam:探讨Beam的跨多种分布式处理框架的兼容性。

三、机器学习算法:1. 回归算法:介绍线性回归、逻辑回归等常用的回归算法。

2. 分类算法:探讨决策树、支持向量机等常用的分类算法。

3. 聚类算法:说明K-means、DBSCAN等常用的聚类算法。

4. 关联规则挖掘算法:介绍Apriori、FP-growth等挖掘频繁项集的算法。

5. 深度学习算法:探讨神经网络、卷积神经网络等深度学习算法的基本原理。

四、数据可视化工具:1. Tableau:介绍Tableau的交互性和灵活性。

2. Power BI:探讨Power BI的数据分析和可视化能力。

Storm对比Flink

Storm对比Flink
• 除了官网外,目前的学习资料,以及发生问题后想找寻的资料 还是很少的,远不如Storm在网上的多。
• 如果一个 task manager 节点因为机器损坏而掉线,整个程序就 会直接终止并从 checkpoint 恢复,而不会保持程序运行并从集 群中重新申请一台空白机器进行恢复。(这一点是和spark有区 别,不能完全说是缺点,只是设计上的不同)
JAVA 无
Flink
有状态
窗口支持较为完善,自带一 些窗口聚合方法,并且会自 动管理窗口状态
At Most Once At Least Once Exactly Once
检查点机制:通过分布式一 致性快照机制,对数据流和 状态进行保存,在发生错误 时使系统能够进行回滚。
Scala, Python, Java
项处理的能力 • Flink能很好地与其他组件配合使用。如果配合Hadoop 堆
栈使用,该技术可以很好地融入整个环境,在任何时候都 只占用必要的资源。该技术可轻松地与YARN、HDFS和 Kafka 集成 • 框架提供了更好的容错以及状态机制
Flink不足之处
• Flink相对于Storm来说比较年轻,使用过这个框架和scala的普及 度目前要比Storm低,如果有大量开发人员开发需要考虑到学习 成本。
流计算框架 Flink 与 Storm 对比
Flink 与 Storm 两个框架对比
状态管理 窗口支持
消息投递
容错方式
开发语言 连接器支持较弱
At Most Once At Least Once
ACK机制:对每个消息进行 全链路跟踪,失败或者超时 进行重发。
• 需要程序能够正常完美的运行,Flink需要优化的地方非常多, 不仅需要在代码上,配置上进行调整,有时连数据库,服务器 方面也是需要一起优化的。(Flink对内存的要求还是挺大的, 相关服务有时候不优化可能会导致OOM,从而节点挂掉后导致 整个作业停止)

统一批处理和流式计算框架

统一批处理和流式计算框架

统一批处理和流式计算框架全文共四篇示例,供读者参考第一篇示例:统一批处理和流式计算框架是当今大数据处理领域中的两大重要技术。

它们分别用于处理离线和实时数据,帮助企业有效地利用数据资源进行分析和决策。

本文将深入探讨统一批处理和流式计算框架的背景、原理、应用场景以及优势和挑战。

一、背景随着互联网的迅速发展和物联网、智能设备的普及,大数据的产生速度呈指数级增长。

传统的数据处理技术已经无法满足对大规模、多样性、高实时性数据的处理需求。

统一批处理和流式计算框架应运而生,成为解决大数据挑战的重要工具。

二、原理1. 统一批处理框架:典型的批处理框架有Hadoop MapReduce、Apache Spark等。

批处理框架通过将数据划分成多个分区,分布式计算每个分区的数据,最后将结果合并。

这种方式适合处理大规模数据量,但实时性较差。

2. 流式计算框架:流式计算框架如Storm、Flink等,采用持续计算的方式处理实时数据流。

数据通过流式管道传输和处理,允许在数据生成和处理过程中快速响应和做出决策。

流式计算框架适合处理需要实时分析和决策的场景。

三、应用场景1. 统一批处理框架:适用于数据量大、批量处理的场景,如离线数据分析、数据挖掘、批量推荐等。

在电商、金融、广告等行业有广泛应用。

2. 流式计算框架:适用于实时监控、实时推荐、实时风控等需要实时决策的场景。

在智能家居、智能交通、智能制造等领域得到广泛应用。

四、优势和挑战1. 统一批处理和流式计算框架的优势在于能够满足不同业务需求的数据处理和分析需求,帮助企业实现数据驱动决策。

2. 统一批处理和流式计算框架也存在一些挑战,如数据一致性、计算性能、容错处理等方面的问题需要解决。

总结:统一批处理和流式计算框架是大数据处理领域的重要技术,通过结合批处理和实时计算,可以更好地满足企业对数据处理和决策的需求。

我们相信在未来的发展中,统一批处理和流式计算框架将会扮演越来越重要的角色,助力企业实现数据驱动的业务目标。

比较机器学习的两个主流框架:TensorFlow和PyTorch

比较机器学习的两个主流框架:TensorFlow和PyTorch

比较机器学习的两个主流框架:TensorFlow和PyTorchTensorFlow和PyTorch是当前机器学习领域的两个主流框架,两者在实现方式和使用方法上都有所不同,各有优缺点。

本文将比较两个框架的特点,希望能够帮助读者选择适合自己的框架。

一、TensorFlow和PyTorch的概述TensorFlow是由Google公司开发的一个开源的机器学习框架,它源于Google Brain团队在进行机器学习研究时使用的一些工具,后来成为了一个独立的项目。

TensorFlow的主要特点是强大的分布式计算能力,支持GPU加速计算,能够实现高效的模型训练和推理。

TensorFlow拥有广泛的应用领域,包括图像识别、语音识别、自然语言处理等。

PyTorch是facebook推出的一个开源的机器学习框架,它中文名为“热力图”,它源于亚马逊推出的另一个机器学习框架Torch,但在TensorFlow的威压下逐渐式微。

PyTorch的主要特点是具有灵活的设计和易于阅读的代码,它具备多种高级特性,如动态计算图和自动微分等。

PyTorch针对研究人员和实验室研究者开发,并且拥有丰富的社区支持,能够快速解决问题。

二、TensorFlow和PyTorch的特点比较1.编程风格和易用性TensorFlow的API风格是静态的,意味着用户需要预先定义计算图,然后再将数据输入其中进行计算。

TensorFlow需要一定的学习曲线和经验才能熟练使用,但一旦熟悉,其代码结构清晰,易于维护。

PyTorch的API风格是动态的,有些类似于Python的编程风格,意味着用户可以像写Python代码一样执行操作。

相对于TensorFlow 而言,PyTorch更加容易使用和学习,因为它可以让用户专注于解决问题本身,而不是图形和会话。

2.计算图构建方式TensorFlow使用静态图,这意味着在定义模型时,用户需要显式地构建计算图,然后再运行图来执行操作。

主流大数据计算引擎对比分析

主流大数据计算引擎对比分析
相对于Storm,Spark Streaming支持更的大吞吐量; 基于Spark内核的迭代计算,Spark Streaming是准实时处理; 良好的容错性和故障恢复能力;
Spark Streaming原理
流入的记录以短时批处理的方式进行计算,每一个批次转化成一个RDD
STORM流处理应用
提纲
分布式批处理计算引擎介绍 分布式流处理计算引擎介绍
MapReduce应用场景
MapReduce基于Google发布的分布式计算框架MapReduce论文设计开发,用于大规模 数据集(大于1TB)的并行运算,特点如下:
- 易于编程:程序员仅需描述做什么,具体怎么做就交由系统的执行框架处理。 - 良好的扩展性:可以添加机器扩展集群能力。 - 高容错性:通过计算迁移或数据迁移等策略提高集群的可用性与容错性。
STORM 应用场景
Storm 可以对大量的数据流进行可靠的实时处理,这一过程也称为“流式处理”;
Storm 支持多种类型的应用,包括:实时分析、在线机器学习、连续计算、分布式RPC(DRPC)、 ETL等;
快速的数据处理、可扩展性与容错性;
STROM原理
基于STROM的情感分析
SPARK Streaming 应用场景
Spark核心概念 – 宽依赖和窄依赖
RDD父子依赖关系:窄(Narrow)依赖和宽(Wide)依赖。窄依赖指父RDD的每一个分 区最多被一个子RDD的分区所用。宽依赖指子RDD的分区依赖于父RDD的所有分区。
Spark SQL- Spark 生态圈的查询引擎
提纲
分布式批处理计算引擎介绍 分布式流处理计算引擎介绍
Байду номын сангаас
谁在使用MapReduce?

电脑显卡的流处理器与并行计算能力

电脑显卡的流处理器与并行计算能力

电脑显卡的流处理器与并行计算能力电脑显卡作为现代电脑的重要组成部分,不仅仅用于显示图像,还具备强大的并行计算能力。

而这一切都得益于显卡中的流处理器。

本文将着重探讨电脑显卡中的流处理器及其并行计算能力。

一、流处理器的概念与作用流处理器,又被称为图形处理器(GPU)或统一着色器单元,是电脑显卡中的核心组件之一。

它承担着图形渲染、图像处理以及并行计算等任务。

相比于中央处理器(CPU),流处理器拥有更多的计算单元和更高的时钟频率,使得其在处理大规模并行任务时具备优势。

流处理器的主要作用在于加速图形渲染过程。

通过调用显卡中的流处理器,可以将图形的渲染计算任务转交给显卡,从而减轻了CPU的负担,提高了图像的渲染速度。

此外,流处理器还可以进行图像处理任务,如滤镜、特效的处理等。

二、流处理器的架构与工作原理1. 流处理器的架构流处理器由大量的计算单元组成,每个计算单元都可以独立进行计算。

这些计算单元可以并行地处理任务,从而实现高效的计算能力。

当前,显卡厂商一般采用SIMD(Single Instruction Multiple Data)的架构,即每个指令可以同时作用于多个数据。

2. 流处理器的工作原理显卡中的流处理器通过调度器(Scheduler)对任务进行调度和执行。

调度器根据任务的特性和优先级,将任务分配给不同的计算单元进行处理。

计算单元独立地执行任务,并将处理结果写回显存。

三、流处理器与并行计算能力的关系流处理器的并行计算能力是其重要的特性之一。

由于显卡中的流处理器具备大量的计算单元,并采用了SIMD架构,使得其在并行计算任务上有着显著的优势。

1. 并行计算任务在现代计算领域,存在许多需要进行大规模并行计算的任务,如科学计算、深度学习、密码学等。

这些任务通常需要处理大量的数据,并进行复杂的计算操作。

传统的CPU并行计算能力相对较弱,而显卡中的流处理器则能够充分利用其大量的计算单元,高效地进行并行计算。

2. 并行计算框架为了充分发挥显卡中流处理器的并行计算能力,许多并行计算框架应运而生。

大数据分析中的数据流处理技术介绍(八)

大数据分析中的数据流处理技术介绍(八)

在大数据分析中,数据流处理技术是一种处理实时、连续流动的数据流的方法,常用于分析那些需要实时响应的应用场景。

以下是一些常见的数据流处理技术:1. 流式数据库:流式数据库是一种专门设计用于处理实时数据流的技术。

它能够实时地存储、查询和分析数据流,提供实时的数据洞察。

流式数据库通常具有高并发、低延迟和实时分析的能力。

2. Apache Flink:Apache Flink 是一个开源的流处理框架,它能够对数据进行高效、实时的处理和分析。

Flink 支持高吞吐量和低延迟,并且能够处理各种数据格式,包括结构化和半结构化数据。

3. Apache Storm:Apache Storm 是一个为实时流数据处理的开源软件框架。

它具有高容错性、高可靠性和高吞吐量,可以实时地处理数据流并输出结果。

4. Apache Samza:Apache Samza 是 Apache 旗下的一个流处理框架,它能够处理大规模、高吞吐量的数据流。

Samza 提供了持久化、容错和可伸缩性等特性,适用于实时计算和消息传递系统。

5. Scalding 和 Spark Streaming:Scalding 是一个用 Scala 编写的、基于 Google Guava 和 Cascading 的大数据处理工具,适用于处理实时数据流。

Spark Streaming 是 Apache Spark 的流处理模块,它能够处理大规模、高吞吐量的数据流,并且与 Spark 的其他功能(如机器学习和图计算)无缝集成。

6. StreamSets:StreamSets 是一个用于实时数据管道的开源软件,它支持在数据源、转换器和目标之间创建灵活的管道,以处理数据流。

StreamSets 提供可扩展性和容错性等特性,适用于实时数据处理和分析。

这些数据流处理技术各有特点,适用于不同的应用场景。

在选择合适的处理技术时,需要考虑数据的性质、处理需求、资源限制等因素。

同时,随着技术的不断发展,新的数据流处理技术也在不断涌现,如分布式计算框架、机器学习算法等,为大数据分析提供了更多的可能性。

主流流处理框架比较

主流流处理框架比较

分布式流处理是对无边界数据集进行连续不断的处理、聚合和分析。

它跟MapReduce一样是一种通用计算,但我们期望延迟在毫秒或者秒级别。

这类系统一般采用有向无环图(DAG)。

DAG是任务链的图形化表示,我们用它来描述流处理作业的拓扑。

如下图,数据从sources流经处理任务链到sinks。

单机可以运行DAG,但本篇文章主要聚焦在多台机器上运行DAG的情况。

关注点当选择不同的流处理系统时,有以下几点需要注意的:运行时和编程模型:平台框架提供的编程模型决定了许多特色功能,编程模型要足够处理各种应用场景。

这是一个相当重要的点,后续会继续。

函数式原语:流处理平台应该能提供丰富的功能函数,比如,map或者filter这类易扩展、处理单条信息的函数;处理多条信息的函数aggregation;跨数据流、不易扩展的操作join。

状态管理:大部分应用都需要保持状态处理的逻辑。

流处理平台应该提供存储、访问和更新状态信息。

消息传输保障:消息传输保障一般有三种:atmostonce,atleastonce和exactlyonce。

Atmostonce的消息传输机制是每条消息传输零次或者一次,即消息可能会丢失;Atleastonce意味着每条消息会进行多次传输尝试,至少一次成功,即消息传输可能重复但不会丢失;Exactlyonce的消息传输机制是每条消息有且只有一次,即消息传输既不会丢失也不会重复。

容错:流处理框架中的失败会发生在各个层次,比如,网络部分,磁盘崩溃或者节点宕机等。

流处理框架应该具备从所有这种失败中恢复,并从上一个成功的状态(无脏数据)重新消费。

性能:延迟时间(Latency),吞吐量(Throughput)和扩展性(Scalability)是流处理应用中极其重要的指标。

平台的成熟度和接受度:成熟的流处理框架可以提供潜在的支持,可用的库,甚至开发问答帮助。

选择正确的平台会在这方面提供很大的帮助。

运行时和编程模型运行时和编程模型是一个系统最重要的特质,因为它们定义了表达方式、可能的操作和将来的局限性。

(完整版)大数据中的流处理与批处理

(完整版)大数据中的流处理与批处理

对流处理与批处理的认识说到对流处理与批处理的认识,首先要知道大数据系统中的一个最基本的组件:处理框架。

所谓处理框架就是负责对系统中的数据进行计算,例如处理从非易失存储中读取的数据,或处理刚刚摄入到系统中的数据。

数据的计算则是指从大量单一数据点中提取信息和见解的过程。

下面是一些常见的框架:(1)仅批处理框架:Apache Hadoop(2)仅流处理框架:Apache Storm,Apache Samza(3)混合框架:Apache Spark,Apache Flink。

首先,我们先了解批处理。

批处理在大数据世界有着悠久的历史。

批处理主要操作大容量静态数据集,并在计算过程完成后返回结果。

批处理模式中使用的数据集通常符合下列特征:有界:批处理数据集代表数据的有限集合。

持久:数据通常始终存储在某种类型的持久存储位置中。

大量:批处理操作通常是处理极为海量数据集的唯一方法。

批处理非常适合需要访问全套记录才能完成的计算工作。

例如在计算总数和平均数时,必须将数据集作为一个整体加以处理,而不能将其视作多条记录的集合。

这些操作要求在计算进行过程中数据维持自己的状态。

需要处理大量数据的任务通常最适合用批处理操作进行处理。

无论直接从持久存储设备处理数据集,或首先将数据集载入内存,批处理系统在设计过程中就充分考虑了数据的量,可提供充足的处理资源。

由于批处理在应对大量持久数据方面的表现极为出色,因此经常被用于对历史数据进行分析。

然而大量数据的处理需要付出大量时间,因此批处理不适合对处理时间要求较高的场合。

Apache Hadoop是一种专用于批处理的处理框架。

Hadoop 是首个在开源社区获得极大关注的大数据框架。

基于谷歌有关海量数据处理所发表的多篇论文与经验的Hadoop重新实现了相关算法和组件堆栈,让大规模批处理技术变得更易用。

Hadoop的处理功能来自MapReduce引擎。

MapReduce的处理技术符合使用键值对的map、shuffle、reduce算法要求。

Java中的ORM框架

Java中的ORM框架
象的属性映射到数据 库表的列
优点:简化了数据
库操作,提高了开 发效率
应用场景:适用于 需要处理大量数据 且需要频繁进行数 据库操作的场景
Part 03
Java中的主流ORM框架
Hibernate
添加 标题
添加 标题
添加 标题
添加 标题
简介:Hibernate是一个流行的Java ORM框架,用于将对象模型映射到关系型数据 库中
当需要快速开发 应用时,可以使 用ORM框架来提 高开发效率
当需要维护和升 级数据库结构时 ,可以使用ORM 框架来降低维护 成本
当需要集成多种 数据库时,可以 使用ORM框架来 统一数据访问层
最佳实践
根据项目需求选 择合适的ORM框 架,如Hibernate 、MyBatis等。
考虑ORM框架的 学习曲线和社区 支持,选择易于 学习和使用的框 架。
灵活的查询机制,支持动态查询和分页查询。
Part 04
ORM框架的优缺点
优点
提高开发效率:自动 化处理对象与关系数 据库之间的映射关系 ,减少手动编码工作 量
降低维护成本:通 过统一的API操作数
据库,降低学习和 维护成本
提高数据访问性能
:通过缓存机制和 优化SQL语句,提高 数据访问性能
易于扩展:支持多 种数据库,易于更 换数据库类型或进 行数据库迁移
• a. 简化了JPA的使用,提供了一种更简洁的API。 • b. 支持多种数据库,如MySQL、PostgreSQL、Oracle等。 • c. 提供了事务管理、缓存、异常处理等功能。 • 使用方法: a. 在Spring配置文件中配置JPA实体类和Repository接口。 b. 使用Spring Data JPA提供的Repository接

flink流处理和批处理原理

flink流处理和批处理原理

flink流处理和批处理原理
Apache Flink是一个开源的流处理框架,它可以在集群上进行批处理和流处理。

Flink的流处理和批处理原理有以下几点:
1. 流处理原理:Flink的流处理是持续的,数据流是无限且连续的。

Flink使用了一种称为“事件时间”的概念,它允许系统处理乱序到达的事件,并且可以进行时间窗口操作,例如滚动窗口和滑动窗口。

Flink 的流处理引擎使用了一个称为“流执行器”(Stream Executor)的组件来管理数据流的处理。

2. 批处理原理:Flink的批处理是离线的,数据流是有限的。

Flink的批处理引擎使用了一个称为“批执行器”(Batch Executor)的组件来管理数据流的处理。

批处理的操作包括Map、Reduce、Filter、FlatMap、KeyBy、Window等。

3. 流处理与批处理的关系:Flink的流处理和批处理是统一的,它们都使用相同的API和数据模型。

Flink的批处理可以被视为一种特殊的流处理,只不过数据流是有限的。

Flink的流处理和批处理都可以使用同样的函数和操作符,例如Map、Reduce、Filter、FlatMap等。

总的来说,Flink的流处理和批处理原理都是基于数据流的,它们都
使用相同的API和数据模型。

Flink的流处理是持续的,而批处理是离线的。

Flink的流处理和批处理可以互相转换,它们之间没有本质的区别。

主流模型推理框架 -回复

主流模型推理框架 -回复

主流模型推理框架-回复主题:主流模型推理框架引言:在人工智能领域,数据分析和推理是关键的任务之一。

推理框架是指根据已有的知识和数据,通过逻辑推理和推论来得出新的结论或发现隐藏的模式和规律。

主流模型推理框架是指目前在学术界和工业界广泛应用的推理框架。

本文将逐步介绍主流模型推理框架,并从原理到应用进行详细阐述。

第一部分:基本概念和原理1. 推理框架的定义:推理框架是一种基于逻辑或统计方法,根据已有的信息和知识进行推理和推断的系统。

推理框架通常包括推理规则、推理引擎和推理结果三个主要组成部分。

2. 基于规则的推理框架:基于规则的推理框架是最早应用的推理方法之一。

它使用事先定义好的规则,将已有的事实与规则进行匹配,并通过逻辑推理和推论得出新的结论。

3. 统计学习的推理框架:统计学习的推理框架是基于概率和统计模型的方法。

它通过对已有的数据进行训练,学习出概率模型,并利用该模型进行推理和预测。

第二部分:主流模型推理框架的具体应用1. 逻辑推理系统:逻辑推理系统是一种基于形式逻辑的推理框架。

它使用逻辑规则和命题之间的关系进行推理和演绎。

逻辑推理系统在人工智能的专家系统中得到广泛应用,用于解决复杂的问题和推断。

2. 贝叶斯网络:贝叶斯网络是一种基于概率图模型的推理框架。

它利用贝叶斯定理和条件概率进行推理和预测。

贝叶斯网络在机器学习和数据挖掘中被广泛用于处理不确定性问题和预测建模。

3. 循环神经网络:循环神经网络是一种基于神经网络的推理框架。

它使用循环结构来处理序列数据,并通过学习序列之间的依赖关系进行推理和预测。

循环神经网络在自然语言处理和语音识别中具有重要的应用。

4. 图神经网络:图神经网络是一种基于图结构的推理框架。

它能够理解图数据中的拓扑结构和节点之间的关系,并进行推理和表示学习。

图神经网络在社交网络分析和推荐系统中有广泛的应用。

第三部分:主流模型推理框架的优缺点1. 基于规则的推理框架的优点是易于理解和解释,但缺点是需要事先定义好大量的规则,并且对复杂问题的推理能力有限。

全面解析流处理框架Flink,以及和Python的结合

全面解析流处理框架Flink,以及和Python的结合

全⾯解析流处理框架Flink,以及和Python的结合楔⼦Flink 在⼤数据领域已经被应⽤的越来越⼴泛,很多⼤公司内部都有它的⾝影,那么问题来了,Flink 到底是⽤来做什么的呢?⾸先提到 Flink 必然绕不开流计算(或者说流式计算、流处理等等),没错,Flink 是⼀个分布式、⾼性能的流计算引擎。

⽐如天猫的成交额⼀分钟能破百亿,⼤屏实时监控等等,其背后靠的就是⼀套强⼤的流计算引擎来⽀撑,从⽽实时动态地得到统计结果。

⽬前在流计算领域,最主流的技术有:Storm、Spark Streaming、Flink,但是能同时做到低延时、Exactly-Once、以及⾼吞吐,在开源界只有 Flink 有这个能⼒。

⾯对⽇益增长的数据规模,以及延时越来越低的数据处理要求,流计算正在成为数据处理平台所必备的能⼒之⼀。

在好⼏年前,我们还停留在 Hadoop、MapReduce、Hive 上⾯,之后 Spark 项⽬异军突起、逐渐成为⼤数据领域的当红明星,即便现在很多公司所使⽤的仍是 Hadoop Spark 等离线处理技术。

但是在未来,流计算⼀定会成为分布式计算的主要⽅向之⼀,⽽如果想掌握流计算相关的技术,Flink 必然是我们的⾸选。

另外除了 Flink 之外,还会涉及到 Python,因为 Python 是⽬前的主流语⾔之⼀,所以 Python + Flink(pyflink)就诞⽣了。

并且我本⼈也是 Python ⽅向的,所以当涉及到使⽤代码操作 Flink 时,只使⽤ Python 进⾏操作。

尽管 Flink 对 Python 的⽀持不像Java 和 Scala 那么完美,但是对我⽽⾔没得选。

⼤数据技术发展从 Google 的三驾马车 GFS、MapReduce、BigTable 开始,⼤数据在不断地发展,⽽在⼤数据处理⾥⾯,计算模式可以分为四种。

⽽我们这⾥重点关注批计算和流计算,那么这两者有什么区别呢?1. 数据时效性不同:流式计算具有实时、低延迟等特点;批量计算则是⾮实时、⾼延迟的。

Flink及Storm、Spark主流流框架比较

Flink及Storm、Spark主流流框架比较

Flink及Storm、Spark主流流框架⽐较引⾔随着⼤数据时代的来临,⼤数据产品层出不穷。

我们最近也对⼀款业内⾮常⽕的⼤数据产品 - Apache Flink做了调研,今天与⼤家分享⼀下。

Apache Flink(以下简称flink) 是⼀个旨在提供‘⼀站式’ 的分布式开源数据处理框架。

是不是听起来很像spark?没错,两者都希望提供⼀个统⼀功能的计算平台给⽤户。

虽然⽬标⾮常类似,但是flink在实现上和spark存在着很⼤的区别,flink是⼀个⾯向流的处理框架,输⼊在flink中是⽆界的,流数据是flink中的头等公民。

说到这⾥,⼤家⼀定觉得flink和storm有⼏分相似,确实是这样。

那么有spark和storm这样成熟的计算框架存在,为什么flink还能占有⼀席之地呢?今天我们就从流处理的⾓度将flink和这两个框架进⾏⼀些分析和⽐较。

1 本⽂的流框架基于的实现⽅式本⽂涉及的流框架基于的实现⽅式分为两⼤类。

第⼀类是Native Streaming,这类引擎中所有的data在到来的时候就会被⽴即处理,⼀条接着⼀条(HINT:狭隘的来说是⼀条接着⼀条,但流引擎有时会为提⾼性能缓存⼀⼩部分data然后⼀次性处理),其中的代表就是storm和flink。

第⼆种则是基于Micro-batch,数据流被切分为⼀个⼀个⼩的批次,然后再逐个被引擎处理。

这些batch⼀般是以时间为单位进⾏切分,单位⼀般是‘秒‘,其中的典型代表则是spark了,不论是⽼的spark DStream还是2.0以后推出的spark structured streaming都是这样的处理机制;另外⼀个基于Micro-batch实现的就是storm trident,它是对storm的更⾼层的抽象,因为以batch为单位,所以storm trident的⼀些处理变的简单且⾼效。

2 流框架⽐较的关键指标从流处理的⾓度将flink与spark和storm这两个框架进⾏⽐较,会主要关注以下⼏点,后续的对⽐也主要基于这⼏点展开:• 功能性(Functionality)- 是否能很好解决流处理功能上的痛点 , ⽐如event time和out of order data。

高通骁龙8 Gen1与苹果A15性能PK

高通骁龙8 Gen1与苹果A15性能PK

高通骁龙8 Gen1与苹果A15性能PK 高通骁龙8 Gen1和苹果A15是目前两大主流移动芯片领域的顶尖产品。

它们都具有强大的处理能力和出色的图形性能,足以满足用户对高性能智能手机的需求。

然而,这两款芯片在性能表现上有何差异呢?本文将对高通骁龙8 Gen1和苹果A15进行性能PK,以便帮助读者更好地了解它们的优劣。

一、CPU性能比较高通骁龙8 Gen1搭载了一颗优化的Kryo 680 CPU,采用了5nm制程工艺。

它采用了2+2+4的三簇架构,其中两颗超大核心(Kryo 680 Gold)主频可达2.84GHz,两颗核心(Kryo 680 Gold)主频可达2.42GHz,四颗效能核心(Kryo 680 Silver)主频可达1.80GHz。

这样的设计使得骁龙8 Gen1在多核性能上表现优秀,可以同时处理多任务。

而苹果A15则采用了由6颗核心组成的全新CPU架构。

其中两颗大核心(A15高性能核心)的主频高达3.23GHz,四颗小核心(A15高效能核心)的主频为2.49GHz。

这样的设计使得A15在单核性能上表现突出,特别适用于单线程应用和游戏。

综合来看,高通骁龙8 Gen1在多核性能上更胜一筹,适合多任务处理和多线程应用,而苹果A15则在单核性能上具备明显优势,适用于单线程应用和游戏。

二、GPU性能比较在图形表现上,高通骁龙8 Gen1搭载了Adreno 660 GPU,相较于上一代产品性能提升了35%。

它支持全新的Vulkan 1.1 API和OpenCL 2.0,并且具备更好的图形处理能力和效率。

这使得骁龙8 Gen1在游戏、图像编辑和视频渲染等方面表现出色,能够提供流畅的游戏体验和高质量的图像处理。

而苹果A15则搭载了全新的5核GPU,相较于上一代产品性能提升了50%。

它采用了自研设计,拥有更高的带宽和更快的渲染速度。

这使得A15在处理3D游戏和高质量图像时更加出色,能够呈现更加逼真的画面效果。

大数据分析使用Spark和Flink处理大规模数据

大数据分析使用Spark和Flink处理大规模数据

大数据分析使用Spark和Flink处理大规模数据随着数字化时代的到来,世界上所创造的数据得到了前所未有的增长。

如何快速、有效地使用这些大规模的数据来分析和发现数据中存在的价值,正成为许多单位、企业关注的话题之一。

本文将介绍两种常用的大数据处理框架:Spark和Flink,并详细讲解如何使用它们来处理大规模数据。

一、Spark和Flink概述Spark和Flink是两种流行的大数据处理框架,它们分别提供了处理大规模数据的解决方案。

Spark可以处理大量的数据,并分布在多台计算机上进行处理,具有内存计算优势,可以加速数据处理。

Flink是一种流处理框架,与Spark相比,Flink可以在低延迟下进行实时数据处理,并具有更好的吞吐量。

二、Spark和Flink的比较尽管Spark和Flink提供了许多相似的功能,但它们之间存在一些区别。

下面列举了一些比较:1. 处理方式不同Spark使用微批处理方式进行数据处理,即周期性地将数据切成小块并批量地处理。

而Flink使用连续流处理方式进行数据处理,即在数据流中提供实时数据,并通过窗口化来处理数据。

2. 计算速度不同Spark可以将所有数据加载到内存中进行处理,这使任务的完成速度非常快。

但当数据量超过内存大小时,性能会急剧下降。

而Flink使用基于磁盘的处理,这使得Flink可以处理大规模数据。

3. 容错机制不同Spark的容错机制基于RDD(弹性分布式数据集)的存储。

当Spark任务执行失败时,RDD可以自动重新计算任务。

而Flink使用基于检查点的机制,以在任务失败时恢复任务状态。

三、Spark和Flink的应用Spark和Flink都支持许多应用程序。

下面列举了一些应用程序:1. 实时流处理Flink是流处理框架,可以处理实时数据流。

因此,它在实时数据分析场景中得到广泛应用。

例如,银行可以使用Flink来处理实时的交易流。

2. 离线批处理Spark提供了一个批处理引擎,可以用于处理离线数据。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分布式流处理是对无边界数据集进行连续不断的处理、聚合和分析。

它跟MapReduce一样是一种通用计算,但我们期望延迟在毫秒或者秒级别。

这类系统一般采用有向无环图(DAG)。

DAG是任务链的图形化表示,我们用它来描述流处理作业的拓扑。

如下图,数据从sources流经处理任务链到sinks。

单机可以运行DAG,但本篇文章主要聚焦在多台机器上运行DAG的情况。

关注点当选择不同的流处理系统时,有以下几点需要注意的:•运行时和编程模型:平台框架提供的编程模型决定了许多特色功能,编程模型要足够处理各种应用场景。

这是一个相当重要的点,后续会继续。

•函数式原语:流处理平台应该能提供丰富的功能函数,比如,map或者filter这类易扩展、处理单条信息的函数;处理多条信息的函数aggregation;跨数据流、不易扩展的操作join。

•状态管理:大部分应用都需要保持状态处理的逻辑。

流处理平台应该提供存储、访问和更新状态信息。

•消息传输保障:消息传输保障一般有三种:at most once,at least once和exactly once。

At most once的消息传输机制是每条消息传输零次或者一次,即消息可能会丢失;A t least once意味着每条消息会进行多次传输尝试,至少一次成功,即消息传输可能重复但不会丢失;Exactly once的消息传输机制是每条消息有且只有一次,即消息传输既不会丢失也不会重复。

•容错:流处理框架中的失败会发生在各个层次,比如,网络部分,磁盘崩溃或者节点宕机等。

流处理框架应该具备从所有这种失败中恢复,并从上一个成功的状态(无脏数据)重新消费。

•性能:延迟时间(Latency),吞吐量(Throughput)和扩展性(Scalability)是流处理应用中极其重要的指标。

平台的成熟度和接受度:成熟的流处理框架可以提供潜在的支持,可用的库,甚至开发问答帮助。

选择正确的平台会在这方面提供很大的帮助。

运行时和编程模型运行时和编程模型是一个系统最重要的特质,因为它们定义了表达方式、可能的操作和将来的局限性。

因此,运行时和编程模型决定了系统的能力和适用场景。

实现流处理系统有两种完全不同的方式:一种是称作原生流处理,意味着所有输入的记录一旦到达即会一个接着一个进行处理。

第二种称为微批处理。

把输入的数据按照某种预先定义的时间间隔(典型的是几秒钟)分成短小的批量数据,流经流处理系统。

两种方法都有其先天的优势和不足。

首先以原生流处理开始,原生流处理的优势在于它的表达方式。

数据一旦到达立即处理,这些系统的延迟性远比其它微批处理要好。

除了延迟性外,原生流处理的状态操作也容易实现,后续将详细讲解。

一般原生流处理系统为了达到低延迟和容错性会花费比较大的成本,因为它需要考虑每条记录。

原生流处理的负载均衡也是个问题。

比如,我们处理的数据按key分区,如果分区的某个key是资源密集型,那这个分区很容易成为作业的瓶颈。

接下来看下微批处理。

将流式计算分解成一系列短小的批处理作业,也不可避免的减弱系统的表达力。

像状态管理或者join等操作的实现会变的困难,因为微批处理系统必须操作整个批量数据。

并且,batch interval会连接两个不易连接的事情:基础属性和业务逻辑。

相反地,微批处理系统的容错性和负载均衡实现起来非常简单,因为微批处理系统仅发送每批数据到一个worker节点上,如果一些数据出错那就使用其它副本。

微批处理系统很容易建立在原生流处理系统之上。

编程模型一般分为组合式和声明式。

组合式编程提供基本的构建模块,它们必须紧密结合来创建拓扑。

新的组件经常以接口的方式完成。

相对应地,声明式API操作是定义的高阶函数。

它允许我们用抽象类型和方法来写函数代码,并且系统创建拓扑和优化拓扑。

声明式API经常也提供更多高级的操作(比如,窗口函数或者状态管理)。

后面很快会给出样例代码。

主流流处理系统有一系列各种实现的流处理框架,不能一一列举,这里仅选出主流的流处理解决方案,并且支持Scala API。

因此,我们将详细介绍Apache Storm,Trident,Spark Streaming,Samza和Apache Flink。

前面选择讲述的虽然都是流处理系统,但它们实现的方法包含了各种不同的挑战。

这里暂时不讲商业的系统,比如Google MillWheel或者Amazon Kinesis,也不会涉及很少使用的Intel GearPump或者Apache Apex。

Apache Storm最开始是由Nathan Marz和他的团队于2010年在数据分析公司BackType 开发的,后来BackType公司被Twitter收购,接着Twitter开源Storm并在2014年成为Apache顶级项目。

毋庸置疑,Storm成为大规模流数据处理的先锋,并逐渐成为工业标准。

Storm是原生的流处理系统,提供low-level的API。

Storm使用Thrift来定义topology和支持多语言协议,使得我们可以使用大部分编程语言开发,Scala自然包括在内。

Trident是对Storm的一个更高层次的抽象,Trident最大的特点以batch的形式进行流处理。

Trident简化topology构建过程,增加了窗口操作、聚合操作或者状态管理等高级操作,这些在Storm中并不支持。

相对应于Storm的At most once流传输机制,Trident提供了Exactly once传输机制。

Trident支持Java,Clojure和Scala。

当前Spark是非常受欢迎的批处理框架,包含Spark SQL,MLlib和Spark Streaming。

Spark的运行时是建立在批处理之上,因此后续加入的Spark Streaming也依赖于批处理,实现了微批处理。

接收器把输入数据流分成短小批处理,并以类似Spark作业的方式处理微批处理。

Spark Streaming提供高级声明式API(支持Scala,Java和Python)。

Samza最开始是专为LinkedIn公司开发的流处理解决方案,并和LinkedIn的Kafka一起贡献给社区,现已成为基础设施的关键部分。

Samza的构建严重依赖于基于log的Kafka,两者紧密耦合。

Samza提供组合式API,当然也支持Scala。

最后来介绍Apache Flink。

Flink是个相当早的项目,开始于2008年,但只在最近才得到注意。

Flink是原生的流处理系统,提供high level的API。

Flink也提供API来像Spark一样进行批处理,但两者处理的基础是完全不同的。

Flink把批处理当作流处理中的一种特殊情况。

在Flink中,所有的数据都看作流,是一种很好的抽象,因为这更接近于现实世界。

快速的介绍流处理系统之后,让我们以下面的表格来更好清晰的展示它们之间的不同:Word CountWordcount之于流处理框架学习,就好比hello world之于编程语言学习。

它能很好的展示各流处理框架的不同之处,让我们从Storm开始看看如何实现Wordcount:TopologyBuilder builder = new TopologyBuilder();builder.setSpout("spout", new RandomSentenceSpout(), 5);builder.setBolt("split", new Split(), 8).shuffleGrouping("spout");builder.setBolt("count", new WordCount(), 12).fieldsGrouping("split", new Fields("word")); ...Map<String, Integer> counts = new HashMap<String, Integer>();public void execute(Tuple tuple, BasicOutputCollector collector) {String word = tuple.getString(0);Integer count = counts.containsKey(word) ? counts.get(word) + 1 : 1;counts.put(word, count);collector.emit(new Values(word, count));}首先,定义topology。

第二行代码定义一个spout,作为数据源。

然后是一个处理组件bolt,分割文本为单词。

接着,定义另一个bolt来计算单词数(第四行代码)。

也可以看到魔数5,8和12,这些是并行度,定义集群每个组件执行的独立线程数。

第八行到十五行是实际的WordCount bolt实现。

因为Storm不支持内建的状态管理,所有这里定义了一个局部状态。

按之前描述,Trident是对Storm的一个更高层次的抽象,Trident最大的特点以batch 的形式进行流处理。

除了其它优势,Trident提供了状态管理,这对wordcount实现非常有用。

public static StormTopology buildTopology(LocalDRPC drpc) {FixedBatchSpout spout = ...TridentTopology topology = new TridentTopology();TridentState wordCounts = topology.newStream("spout1", spout).each(new Fields("sentence"),new Split(), new Fields("word")).groupBy(new Fields("word")).persistentAggregate(new MemoryMapState.Factory(),new Count(), new Fields("count"));...}如你所见,上面代码使用higher level操作,比如each(第七行代码)和groupby(第八行代码)。

并且使用Trident管理状态来存储单词数(第九行代码)。

下面是时候祭出提供声明式API的Apache Spark。

记住,相对于前面的例子,这些代码相当简单,几乎没有冗余代码。

相关文档
最新文档