大数据(三)大数据技术栈发展史

-系列目录-

大数据(一)背景和概念

大数据(二)大数据架构发展史

大数据(三)大数据技术栈发展史

 

前两章,我们分析了大数据相关的概念和发展史,本节我们就讲一讲具体的大数据领域的常见技术栈发展史。对主流技术栈有一个初步的认知。

一、总览

大数据技术栈非常多估计大大小小多达上百种。但发展史、技术体系仍有迹可循。我们从数据采集、清洗、应用3大步骤来看,在每个步骤内部按照时序标识主流技术栈时间点。以此期望能给大家一个初步的映像。三大步骤如下:

  • 数据采集:从数据源进行数据同步,大致分为:主动查询DB数据批量(离线)同步、基于DB log数据变更(实时)同步2大类。
  • 数据清洗:标准的ETL数据清洗,大致分为:离线计算批处理)、实时计算(流处理)2大类。
  • 数据应用:OLAP在线数据分析、报表、数据大屏、大数据查询服务API。

分步骤整体技术栈如下图所示:

二、技术栈

2.1 数据集采

如上图,数据采集可以归纳为两大类:离线查询同步、实时变更同步。如下图所示:

2.1.1 离线同步

离线同步常见技术栈有:Sqoop、Flume、DataX。

2.1.1.1 Sqoop-2009

1)介绍 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递。可以将关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,2012年Sqoop成为Apache顶级项目。2021年由于三年未更新,已被挪入apache attic(被淘汰的项目)。 2)原理 JDBC直连,会影响源库性能。项目已过时,除非是之前一直在用可以继续用,否则不建议使用

2.1.1.2 Flume-2009

1)介绍

Apache Flume 是一个分布式、高可靠、高可用的用来收集、聚合、转移不同来源的大量日志数据到中央数据仓库的工具。也是Apache顶级项目。

2)同步原理

flume采集流模式进行数据实时采集。适用于日志文件实时采集,特定文件传输场景使用。

2.1.1.3 DataX-2019

1)介绍

DataX是阿里开源的,异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

2)同步原理

为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

数据库日志同步。适用于在异构数据库/文件系统之间高速交换数据,是主流的离线同步工具,推荐使用

2.1.2 实时同步

2.1.2.1 Canal-2014

1)介绍

canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。2014年,由Alibaba开源。

github:http://github.com/alibaba/canal,阿里巴巴 MySQL binlog 增量订阅&消费组件。

2)同步原理

数据库增量日志解析。仅适用于Mysql数据同步,适用场景局限性过大,无法作为通用技术栈

2.1.2.2 Debezium-2015

1)介绍

 RedHat(红帽公司) 开源的Debezium是一个将多种数据源实时变更数据捕获,形成数据流输出的开源工具。 它是一种CDC(Change Data Capture)工具,工作原理类似大家所熟知的 Canal, DataBus, Maxwell 等,是通过抽取数据库日志来获取变更的。

2)同步原理

Debezium的工作原理是利用数据库日志来捕获数据库更改事件,深度结合Kafka实现

2.1.2.3 FlinkCDC-2020

1)介绍

FlinkCDC是Apache Flink的一组源连接器,使用更改数据捕获(CDC)从不同的数据库摄取更改。项目诞生于2020年,底层也是封装的Debezium。

github:   http://github.com/ververica/flink-cdc-connectors

2)同步原理

同Debezium。

2.1.3 总结

常见开源CDC方案比较如下:

如上图,如果需要做全量+增量同步,FlinkCDC是一个不错的选择。(支持的下游生态更丰富、操作更简单Flink SQL)

2.2 数据清洗

 数据清洗阶段是大数据的核心能力阶段,主要包含计算(离线计算、实时计算)+存储(分布式存储),下面我们就从这两个方面来看有哪些主流技术栈。

如上图所示,Google在2003-2006之间发布了3篇始祖级论文:2003分布式文件系统GFS、2004分布式计算框架MapReduce、2006NoSQL数据库系统BigTable。之后在2006年发布了大数据平台Hadoop,自此这只黄色的可爱小象,驰骋在大数据领域,所向披靡。

2.2.1 计算-离线计算(批计算)

离线计算领域Hadoop的MapReduce是始祖,有2个衍生技术栈:Pig和Hive。最后一个Spark相对Hadoop MapReduce性能上有极大提升。

2.2.1.1 Hadoop MapReduce-2006

1)介绍

Hadoop MapReduce是一个软件框架,可以轻松地编写应用程序,以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)。

2)原理

MapReduce 作业通常将输入数据集拆分为独立的块,这些任务由地图任务以完全并行的方式进行处理。框架对地图的输出进行排序,然后将其输入到reduce任务。

2.2.1.2 Pig-2007

1)介绍

为了简化MapReduce开发的流程,Yahoo工程师发明了Pig,后捐给了Apache。只需编写Pig Latin脚本语言,系统自动转化成mapreduce执行。pig不是主流技术栈,不建议使用。

2)原理

Apache PIG提供一套高级语言平台,用于对结构化与非结构化数据集进行操作与分析。这种语言被称为Pig Latin,其属于一种脚本形式,可直接立足于PIG shell执行或者通过Pig Server进行触发。用户所创建的脚本会在初始阶段由Pig Latin处理引擎进行语义有效性解析,而后被转换为包含整体执行初始逻辑的定向非循环图(简称DAG)。

2.2.1.3 Hive-2007

1)介绍

Hive起源于FaceBook,是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行

2)原理

如上图所示,Hive基本原理就是转换HQL语言为MapReduce任务来执行。hive 并非为联机事务处理而设计,hive 并不提供实时的查询和基于行级的数据更新操作。hive的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。

2.2.1.4 Spark-2010

1)介绍

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。简单来说,Spark是一个快速,通用,可扩展分布式计算引擎。这里把Spark划归离线计算,是把Spark Streaming排除在外的。Spark是离线计算(批处理)领域的主流技术栈。

2)原理

如上图所示,Spark有三个主要特性:RDD的编程模型更简单DAG切分的多阶段计算过程更快速使用内存存储中间计算结果更高效。这三个特性使得Spark相对Hadoop MapReduce可以有更快的执行速度,以及更简单的编程实现。这里具体的细节原理就不展开细讲。

2.2.2 计算-实时计算(流计算)

 

流式计算领域,有3个典型技术栈:Storm、Spark Streaming、Flink,其中Spark Streaming是“微批拟流”,不能算是真流。两种流式处理说明如下:

1)Native Streaming原生流:指每个传入的记录一到达就会被处理,而不必等待其他记录。

 

2)Micro-batching微批拟流: 这意味着每隔几秒就会将传入记录一起批处理,然后在一个小批量中处理,延迟几秒钟。

 

2.2.2.1 Storm-2011

1)介绍

Storm是一个免费开源、分布式、高容错的实时计算系统。Storm最早于2011年诞生于Twitter,2013年进入Apache社区进行孵化, 2014年9月,晋级成为Apache顶级项目。早期Storm用于实时计算,Hadoop用于离线计算。现阶段已不推荐使用

2)原理

在Storm中,先要设计一个用于实时计算的图状结构,我们称之为拓扑(topology),它的结构和Mapreduce任务类似,通过自定定义Spout(数据输入处理模块)和Bolt(输出处理模块)逻辑,以及自定义Bolt之间的拓扑依赖关系,完成整个实时事件流的处理逻辑搭建。Topology(拓扑)是一个是由 SpoutsBolts 通过 Stream 连接起来的有向无环图。Topology将会被提交给集群,由集群中的主控节点(master node)分发代码,将任务分配给工作节点(worker node)执行。Topology拓扑结构如下图所示:

Storm采用主从架构。nimbus是集群的Master,负责集群管理、任务分配等。supervisor是Slave,是真正完成计算的地方,每个supervisor启动多个worker进程,每个worker上运行多个task,而task就是spout或者bolt。supervisor和nimbus通过ZooKeeper完成任务分配、心跳检测等操作。如下图所示:

2.2.2.2 Spark Streaming-2013

1)介绍

Spark是Hadoop的批处理(MapReduce)实际继承者。为了应对流式处理场景,2013年Spark 2.0推出了Spark Streaming。但由于不是原生流处理技术栈,存在时延,加之高级功能不如Flink,已不是主流技术栈

2)原理

Spark Streaming是在 Spark Core API基础上扩展出来的,以微批模式实现的近实时计算框架,它认为流是批的特例,将输入数据切分成一个个小的切片,利用Spark引擎作为一个个小的batch数据来处理,最终输出切片流,以此实现近似实时计算。如下图所示:

 

2.2.2.3 Flink-2014

1)介绍

Apache Flink是一个框架和分布式处理引擎,用于无界和有界数据流的有状态计算。Flink创造性地统一了流处理和批处理,作为流处理看待时输入数据流是无界的,而批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。2015年发布了第一个版本,目前Flink已成为流处理领域的实际标准,且大有一统某些场景的批流一体方案的计算引擎。

同时支持有界、无界:

 

2)原理

Flink 架构也遵循Master-Slave架构设计原则,JobManager为Master节点,TaskManager为Slave节点。架构图如下:

2.2.3 分布式存储

相比于计算领域的百花齐放,分布式存储技术栈就显得独树一帜了。最早的Hadoop HDFS分布式文件系统,以及基于HDFS衍生出来的Hbase。

 

1)介绍

HBase是一个分布式的、面向列的开源数据库。建立在 HDFS 之上。Hbase的名字的来源是 Hadoop database。HBase 的计算和存储能力取决于 Hadoop 集群。它介于NoSql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过Hive支持来实现多表join等复杂操作)。

HBase中表的特点:

  • :一个表可以有上十亿行,上百万列。
  • 面向列:面向列(族)的存储和权限控制,列(族)独立检索。
  • 稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

2)原理

hbase的系统架构如下:

HBase由三种类型的服务器以主从模式构成:

  • Region Server:负责数据的读写服务,用户通过与Region server交互来实现对数据的访问。
  • HBase HMaster:负责Region的分配及数据库的创建和删除等操作。
  • ZooKeeper:负责维护集群的状态(某台服务器是否在线,服务器之间数据的同步操作及master的选举等)。

HBase 表数据模型如下:

 

与nosql数据库一样,row key是用来检索记录的主键。访问hbase table中的行,只有三种方式:

  1. 通过单个row key访问
  2. 通过row key的range
  3. 全表扫描

 

2.3 数据应用

 本节聚焦大数据OLAP,讲解主流技术栈。OLAP技术发展至今,已经是”百花齐放“之势,可简单分三类:

  • ROLAP(Relational OLAP,关系型OLAP):使用关系数据库存储管理数据仓库,以关系表存储多维数据,有较强的可伸缩性。其中维数据存储在维表中,而事实数据和维 ID 则 存储在事实表中,维表和事实表通过主外键关联。
  • MOLAP(Multidimensional OLAP,多维型OLAP):MOLAP 支持数据的多维视图,采用多维数据组存储数据,它把维映射到多维数组的下标或下标的范围,而事实数据存储在数组单元中, 从而实现了多维视图到数组的映射,形成了立方体的结构。
  • HOL(Hybrid OLAO,混合型OLAP): 混合存储,如低层是关系型的,高层是多维矩阵型的,灵活性强。将明细数据保留在关系型数据库的事实表中,聚合后数据保存在Cube中,查询效率比 ROLAP 高,但性能低于 MOLAP。

2.3.1 ROLAP

Rolap(Relational OLAP),即关系型OLAP。Rolap基于关系型数据库,它的OLAP引擎就是将用户的OLAP操作,如上钻下钻过滤合并等,转换成SQL语句提交到数据库中执行,并且提供聚集导航功能,根据用户操作的维度和度量将SQL查询定位到最粗粒度的事实表上去。分为两大类:1、MPP数据库 2、SQL on Hadoop。

2.3.1.1 MPP数据库

 MPPDB即基于MPP架构(Massive Parallel Processing,海量并行处理)的数据库。典型技术栈有:Doris/StarRocks、ClickHouse、GreenPlum。

Doris-2018

Apache Doris是由百度开源的一款MPP数据库,支持标准的SQL语言,兼容MYSQL协议,可直接对接主流BI系统。2018年捐给apache,后在2022年成为Apache 顶级项目。使用简单、生态完善、运维方便、稳定可靠、国产之光----一站式开箱即用,无脑推荐使用。Doris定位如下图:

ClickHouse-2016

ClickHouse是俄罗斯的Yandex于2016年开源的一个用于联机分析(OLAP)的列式数据库管理系统。性能极高,运维难度较大,全球风靡---推荐使用。看官网介绍的定位支持任何数据源的快速查询,如下图:

 

GreenPlum

GP(GreenPlum)是2015年开源的老牌的关系型分布式数据库,它在开源的PG(PostgreSql)的基础上采用MPP架构,具有强大的大规模数据分析任务处理能力。----已过时,不推荐

2.3.1.2 SQL on Hadoop

SQL on Hadoop就是利用HDFS实现高度可扩展的数据存储,使得用户可以使用SQL语言,对存储在HDFS上的数据进行分析。这实际上是一套计算和存储分离的方案。
 
2.3.1.2.1 基于MPP架构

为了提高SQL on Hadoop的性能,第一个重要技术流派的就是MPP(Massively Parallel Processing),即大规模并行处理。简单来说,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果(与Hadoop相似)。 其中的代表就是 Presto & Impala

  1)Presto

Presto是 Facebook 推出分布式SQL交互式查询引擎,完全基于内存的并行计算,这也是为啥Presto比Hive快的原因。Presto架构图如下:

  2)Impala

Impala是 Cloudera 在受到 Google 的 Dremel 启发下开发的实时交互SQL大数据查询工具,其也是基于内存的并行计算框架,缺点是仅适用于 HDFS/Hive 系统的查询。

  

  3)其它

  • Drill: Drill 是2012年,MapR 公司开源的一个低延迟的大数据集的分布式SQL查询引擎,是谷歌Dremel的开源实现。它支持对本地文件、HDFS、HBASE等数据进行数据查询。它与同是源自 Dremel 的 Impala 比较类似。
  • HAWQ:HAWQ(Hadoop With Query) 是 Pivotal 公司开源的一个 Hadoop 原生大规模并行SQL分析引擎,基于 GreenPlum 实现,采用主从改进MPP架构,将MPP与批处理系统有效的结合。
 2.3.1.2.2 通用型
   1)Hive SQL-2007 Hive由 Facebook 开源,用于解决海量日志数据的分析,是一个构建于Hadoop顶层的数据仓库工具。底层实现就是Hadoop原生MapReduce.    2)Spark SQL-2010 Spark是UC Berkeley AMP lab开源的类MapReduce的通用的并行计算框架。Spark SQL 使用内存计算模型,比 MapReduce 磁盘访问的方式在性能上有极大提升    2)Flink SQL-2019

Blink诞生于2015年,在Alibaba内部使用,2019年开源并于Flink1.9.0版本。Flink SQL 可以做到 API 层的流与批统一,这是一个极大的进步,让用户关注核心API即可而不用关注底层细节

2.3.2 MOLAP

 MOLAP多维型OLAP,即事先将汇总数据计算好,以多维数组的形式保存数据。其核心思想是借助预先聚合结果,用空间换时间。典型架构就是Kylin和Druid。

2.3.2.1 Kylin

Kylin 是2014年由eBay中国研发中心开源的OLAP引擎,提供 Hadoop/Spark 之上的 SQL 查询接口及多维分析能力以支持超大规模数据,它能在亚秒内查询巨大的Hive表。其核心技术点在于预计算和Cube(立方体模型)的设置:首先, 对需要分析的数据进行建模,框定需要分析的维度字段;然后通过预处理的形式,对各种维度进行组合事先聚合,将聚合结果以某种索引或者缓存的形式保存起来;最后查询时直接利用结果返回数据。
  • 优点:快。
  • 缺点:只读分析引擎,不支持insert,update,delete等SQL操作;cube建模有成本。

2.3.2.2 Druid

Druid是由广告公司 MetaMarkets 于2012年开源的实时大数据分析引擎。Druid 作为MOLAP引擎,也是对数据进行预聚合。只不过预聚合的方式与Kylin不同,Kylin是Cube化,Druid的预聚合方式只是全维度进行Group-by,相当于是Kylin Cube 的 base cuboid。
  • 优点:快、不需要专业建模能力。
  • 缺点:只适合聚合查询和报告查询,且速度没有Kylin快;
 

 

    =============参考===========

技术争鸣——关于OLAP引擎你所需要知道的一切

HBase 底层原理详解(深度好文,建议收藏)

hbase官网 Apache Doris vs Clickhouse vs Greenplum   ------------------个人能力有限,大家多交流,一起壮哉我大JAVA!------------------

如果你觉得本文对你有点帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

本文转载于网络 如有侵权请联系删除

相关文章

  • Upload-labs 通关学习笔记

    Upload-labsBy:Mirror王宇阳 2019年11月~ 文件上传解析学习 环境要求若要自己亲自搭建环境,请按照以下配置环境,方可正常运行每个Pass。配置项配置描述操作系统WindoworLinux推荐使用Windows,除了Pass-19必须在linux下,其余Pass都可以在Windows上运行PHP版本推荐5.2.17其他版本可能会导致部分Pass无法突破PHP组件php_gd2,php_exif部分Pass依赖这两个组件中间件设置Apache以moudel方式连接技术摘录判断文件长传点Pass-01[源码]functioncheckFile(){ varfile=document.getElementsByName('upload_file')[0].value; if(file==null||file==""){ alert("请选择要上传的文件!"); returnfalse; } //定义允许上传的文件类型 varallow_ext=".jpg|.png|.gif"; //提取上传

  • 你可能不知道的 10 个 Chrome DevTools 技巧

    ChromeDevTools对前端工程师来说,几乎每天都会用到,但是有些技巧你可能不知道,让我们来了解一下吧~1.轻松获取某个审查元素的引用打开控制台,在Elements界面下,对着某个dom标签点击右键,选择Storeasglobalvariable。2.创建并钉住一个动态表达式你可以在控制台创建一个动态表达式,并且把它钉到控制台顶部,这对观察页面上某个变化的元素非常有用。3.模拟弱网环境 在Network界面下可以模拟多种不同的网络环境,利用它可以观察你的应用在不同环境下的加载时间。4.禁用缓存和保存日志缓存有时候会造成很多难以排查的bug,为了排除这个因素,你可以勾选Network界面下的Disablecache选项(它只在DevTools窗口打开时生效)。Preservelog可以让你在切换页面的时候也能保存控制台中的打印日志。5.在控制台直接创建截图ChromeDevtools有一个内置的截图工具。打开控制台,然后按下Ctrl+Shift+P,输入screenshot,即可选择针对当前网页进行截图。如果选择Capturenodescreenshot还可以针对当前选中的元素创建

  • 计算机视觉中的注意力机制原理及其模型发展

    1Attention机制与显著图 1.1何为Attention机制所谓Attention机制,便是聚焦于局部信息的机制,比如图像中的某一个图像区域。随着任务的变化,注意力区域往往会发生变化。面对上面这样的一张图,如果你只是从整体来看,只看到了很多人头,但是你拉近一个一个仔细看就了不得了,都是天才科学家。 图中除了人脸之外的信息其实都是无用的,也做不了什么任务,Attention机制便是要找到这些最有用的信息,可以想见最简单的场景就是从照片中检测人脸了。1.2基于Attention的显著目标检测和注意力机制相伴而生的一个任务便是显著目标检测,即salientobjectdetection。它的输入是一张图,输出是一张概率图,概率越大的地方,代表是图像中重要目标的概率越大,即人眼关注的重点,一个典型的显著图如下:右图就是左图的显著图,在头部位置概率最大,另外腿部,尾巴也有较大概率,这就是图中真正有用的信息。显著目标检测需要一个数据集,而这样的数据集的收集便是通过追踪多个实验者的眼球在一定时间内的注意力方向进行平均得到,典型的步骤如下:(1)让被测试者观察图。(2)用eyetracker记

  • 纯64位版浏览器:Waterfox水狐浏览器

    近期博主将自己的本本的内存从2G升级到4G,勉勉强强实现了不正规双通道(CPU-Z检测成功)。为了最大程度地发挥这6G的性能,博主又将系统升级到了64位Windows7专业版。经验告诉我,64位系统最好使用64位软件才能得到最好的效果,于是在进程管理器里面挨个查看哪些进程后面跟了“*32”,跟了这个标志表示这个软件是32位的。虽然64位系统也是配套了64位IE的,但是用惯了第三方浏览器之后,真的很不喜欢IE。于是去网上找下有什么64位浏览器,一查才知道国内第三方浏览器还真没有Win64版本!不甘心,继续扒,终于找到了火狐浏览器的64位衍生版本=>Waterfox水狐浏览器(当时这名字让我诧异了半天...),这开发人员还是挺有意思的哈。在官方下载安装之后,发现除了名称、LOGO及位数不一样,其他都和火狐一致,毕竟是衍生版本。至于功能介绍,使用说明之类的,网络上都有介绍,我也就不赘述了。说下安装及汉化方法:下载地址:官方下载安装方法:常规安装即可,如果提示msvcr100.dll错误,需要安装VisualC++Redistributable汉化方法:1.下载Waterfox汉化包 :

  • 大数据分析的光荣与陷阱——从谷歌流感趋势谈起

    沈艳 北京大学国家发展研究院教授  “谷歌流感趋势”(GoogleFluTrends,GFT)未卜先知的故事,常被看做大数据分析优势的明证。2008年11月谷歌公司启动的GFT项目,目标是预测美国疾控中心(CDC)报告的流感发病率。甫一登场,GFT就亮出十分惊艳的成绩单。2009年,GFT团队在《自然》发文报告,只需分析数十亿搜索中45个与流感相关的关键词,GFT就能比CDC提前两周预报2007-2008季流感的发病率。  也就是说,人们不需要等CDC公布根据就诊人数计算出的发病率,就可以提前两周知道未来医院因流感就诊的人数了。有了这两周,人们就可以有充足的时间提前预备,避免中招。多少人可以因为大数据避免不必要的痛苦、麻烦和经济损失啊。  此一时,彼一时。2014年,Lazer等学者在《科学》发文报告了GFT近年的表现。2009年,GFT没能预测到非季节性流感A-H1N1;从2011年8月到2013年8月的108周里,GFT有100周高估了CDC报告的流感发病率。高估有多高呢?在2011-2012季,GFT预测的发病率是CDC报告值的1.5倍多;而到了2012-2013季,GFT流感发

  • MySQL 数据类型的属性 约束 三大范式

    MySQL数据类型的属性约束三大范式数据表是数据库的基本组成元素,以记录行和字段列组成的二维结构用于存储数据。表头字段名1字段名2数据单元数据1数据2列如:学号姓名专业201911250101小王软件技术MySQL中数据类型的属性MySQL关键字含义null数据列中可包含null值notnull数据列中不允许包含空值default默认值primarykey主键auto_increment自动递增unsigned无符号characterset<字符集名>指定一个字符集zerofill数值类型前自动用0补足位数comment数据表设置主要设置字段名称、字段类型、字段属性。根据需求一般还要使用约束、索引、主键、外键等功能属性。列如:MySQL的约束mysql的约束是☞对数据表数据的一种约束行为,约束主要完成对数据的检验,如果有相互依赖数据,保证该数据不被删除。mysql的约束主要包括主键约束、外键约束、唯一约束、非空约束、默认值约束。1、主键约束(primarykey)唯一的标识一行和作为一个可以被外键有效引用的对象。通常在数据表中将一个字段或多个字段组合设置为各种不同的值,以便

  • 域名注册与域名解析

    Author Email YaoyaoLiu yaoyaoliu@msn.com 域名注册 如果你想要一个域名,就要找一个域名注册商,帮你向ICANN申报。简单来说,就是要花钱买。 域名注册商,或者提供域名注册的代理商有很多。在国内,比较有名的有万网(现在已经被阿里云收购)、DNSPod(现在已经被腾讯云收购)等等;在国外,有GoDaddy、name.com、namecheap、gandi等等。 选择域名注册商主要看两方面:第一是域名注册服务本身,比如域名价格、续费价格、转出是不是容易,提供SSL服务、whois保护服务怎么样。第二点就是DNS服务,注册域名,一般就会直接使用注册商提供的DNS服务,这样最方便。除非是使用收费DNS或者注册商不提供DNS,不然的话大家一般也不会换DNS服务器。 国内域名注册商的劣势就是提供的域(就是后缀,如‘.me’、‘.io’等)相对较少。而且转出也比较麻烦。另外还有一点,就是要实名认证,否则会被暂停解析。不过就算存在这些劣势,我还是挺推荐国内域名商的。首先如果你的网站主要访问用户在国内,万网和腾讯云的DNS速度都会比较快,而且都提

  • 【自考】大学本科那个数据结构怎么学,期末不挂科指南,第1篇

    数据结构那些事 如果你现在在上大学,恰好又是计算机相关专业 那么你肯定知道有一个非常枯燥的必修课《数据结构导论》 当然,你现在没上大学或者不是计算机专业,那你现在应该知道了,他们有个必修课叫《数据结构导论》 从今天开始梦想橡皮擦要写一套非常有趣的课程了 这套课程目的很简单 目的:如何通过数据结构期末考试,有趣! 适合人群: 大学计算机相关专业,有这门课程,然鹅你没学,或者因为一些莫名奇妙的原因,你旷课了 你想通过自考,注意自考,然后获取计算机的一个本科学历,这门课也是必修。 一门课程开始前,我们要先关注这门课的重点 大纲如下 按照国内比较权威的教材,一般情况下,自考采用的是《全国高等教育自学考试指导委员会》给推荐的书籍 本套课程参考的是自考书籍《数据结构导论2012主编:郑诚》外语教学研究出版社出版 知识点大纲如下 第一章概论 第二章线性表 第三章栈、队列和数组 第四章树和二叉树 第五章图 第六章查找 第七章排序 不同教材,侧重点不同,但是考点是覆盖的。包括你们的期末考试 来吧,今天开始第一章,概论 概论 重点考点 咱直接些,直接来重要考点就行了,搞定这些就OK啦 基本概念

  • C++ Data Types

    DataType Size(inbytes) Range shortint 2 -32,768to32,767 unsignedshortint 2 0to65,535 unsignedint 4 0to4,294,967,295 int 4 -2,147,483,648to2,147,483,647 longint 4 -2,147,483,648to2,147,483,647 unsignedlongint 8 0to4,294,967,295 longlongint 8 -(2^63)to(2^63)-1 unsignedlonglongint 8 0to18,446,744,073,709,551,615 signedchar 1 -128to127 unsignedchar 1 0to255 float 4 double 8 longdouble 12 wchar_t 2or4 1widecharacter

  • C#使用异步操作时的注意要点(翻译)

    异步操作时应注意的要点 使用异步方法返回值应避免使用void 对于预计算或者简单计算的函数建议使用Task.FromResult代替Task.Run 避免使用Task.Run()方法执行长时间堵塞线程的工作 避免使用Task.Result和Task.Wait()来堵塞线程 建议使用await来代替continueWith任务 创建TaskCompletionSource时建议使用TaskCreationOptions.RunContinuationsAsynchronously属性 建议使用CancellationTokenSource(s)进行超时管理时总是释放(dispose) 建议将协作式取消对象(CancellationToken)传递给所有使用到的API 建议取消那些不会自动取消的操作(CancellationTokenRegistry,timer) 使用StreamWriter(s)或Stream(s)时在Dispose之前建议先调用FlushAsync 建议使用async/await而不是直接返回Task 使用场景 使用定时器回调函数 创建回调函数参数时注意避免as

  • 快速失败(fail-fast)和安全失败(fail-safe)

    快速失败(fail-fast)和安全失败(fail-safe) 一:快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出ConcurrentModificationException。 原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个modCount变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()/next()遍历下一个元素之前,都会检测modCount变量是否为expectedmodCount值,是的话就返回遍历;否则抛出异常,终止遍历。复制 注意:这里异常的抛出条件是检测到modCount!=expectedmodCount这个条件。如果集合发生变化时修改modCount值刚好又设置为了expectedmodCount值,则异常不会抛出。因此,不能依赖于这个异常是否抛出而进行并发操作的编程,这个异常只建议用于检测并发修改的bug。 场景:java.util包下的集合类都是快速失败的,不能在多线程下发生并发修改(迭代过程中被修改)。

  • C++.时间间隔

    1、HMI(Linux底层)上测试OK    20220315 #include"macrotypedef.h" #include"math.h" //功能:??? #include<stdio.h> #include<time.h> #include<sys/time.h> //usingnamespacestd; voidsetDay(structtm*day,inty,intm,intd) { day->tm_year=y-1900; day->tm_mon=m-1; day->tm_mday=d; day->tm_hour=day->tm_min=day->tm_sec=0; } intMacroEntry() { structtmtime1,time2; time_ttim1,tim2; inty1=1970,mon1=5,day1=4; inty2=2000,mon2=6,day2=14; //cin>>y1>>mon1>>day1; //cin>

  • 记录六20180613

    1、static的作用? 个人理解static有两个作用,第一是对代码的隐藏性,第二个就是改变存储位置 1)static修饰局部变量 那么局部变量其实就变成了一个全局变量,只初始化一次,并且变量存储的位置从栈到了全局静态存储区 2)static修饰全局变量 没有什么变化,存储位置没有变化,但是该全局变量只能在该.c文件中使用 3)static修饰函数 函数代码段存储在了静态区,其次,该函数只在本.c文件中可见,也就是不能extern了 4)static修饰成员变量 static修饰的成员变量其实就是全局变量了,不依赖于类对象存在而存在, 5)static修饰成员函数 此时的成员函数入参就没有默认的this指针了,不依赖于类对象存在而存在,只能调用同类的其他静态函数和静态变量 2、是否了解开源项目openstack/DBK? 3、Linux的常用指令? 4、vim操作同时打开两个文件?如何批量替换一个字符串? 5、对云计算的认识? 6、有没有遇到过SQL语句的优化? 7、如何统计性能?CPU跑高时如何考虑优化?

  • 让你fork下来的项目与源项目保持同步

    原文在此,建议阅读,我把关键步骤抽出来了,方便概览 (也就是addremoteupstream,fetchupstream,rebase,再push) Step1:Forkingarepo gitclonehttps://github.com/nitin-test/blog-example-fork.git gitremoteaddupstreamhttps://github.com/nitstorm/blog-example.git gitremote gitremoteshoworigin gitremoteshowupstream 复制 Step2:MakingchangesandsubmittingPullRequests gitcheckout-bword-addition gitcommit-am"Addsthewordmemory" gitpushoriginword-addition #网页端发起merge到master 复制 Step3:Keepingtheforkedreposyncedwiththemainrepo #确保你是在master分支 gitchecko

  • HTTP协议

    一、什么是HTTP协议   HTTP是hypertexttransferprotocol(超文本传输协议)的简写,它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEB服务器之间交换数据的过程。客户端连上web服务器后,若想获得web服务器中的某个web资源,需遵守一定的通讯格式,HTTP协议用于定义客户端与web服务器通迅的格式。 二、HTTP协议的版本   HTTP协议的版本:HTTP/1.0、HTTP/1.1 HTTP/1.0,发送请求,创建一次连接,获得一个web资源,连接断开。 HTTP/1.1,发送请求,创建一次连接,获得多个web资源,保持连接。 三、HTTP组成  Http协议由Http请求和Http响应组成,当在浏览器中输入网址访问某个网站时,你的浏览器会将你的请求封装成一个Http请求发送给服务器站点,服务器接收到请求后会组织响应数据封装成一个Http响应返回给浏览器。即没有请求就没有响应。           3.2、HTTP——请求行   请求行中的GET称之为请求方式,常用的有:GET、POST

  • POJ 1655.Balancing Act 树形dp 树的重心

    BalancingAct TimeLimit: 1000MS   MemoryLimit: 65536K TotalSubmissions: 14550   Accepted: 6173 Description ConsideratreeTwithN(1<=N<=20,000)nodesnumbered1...N.Deletinganynodefromthetreeyieldsaforest:acollectionofoneormoretrees.DefinethebalanceofanodetobethesizeofthelargesttreeintheforestTcreatedbydeletingthatnodefromT. Forexample,considerthetree: Deletingnode4yieldstwotreeswhosemembernodesare{5}and{1,2,3,6,7}.Thelargerofthesetwotreeshasfiven

  • UIWebView的探索

    UIWebView         说到iOS的UIWebView,应该会很快回忆起常用委托方法,异步loadRequest、stopLoading、reload方法等。         在此我总结一些容易忽略的属性和方法: 1、 判断webView状态,采用属性: @property(nonatomic,readonly,getter=isLoading)BOOLloading 2、 判断webView当前是否可以前进或者后退: @property(nonatomic, readonly, getter=canGoBack) BOOL canGoBack  @property(nonatomic, readonly, getter=canGoForward) BOOL canGoForward 3、 页面的前

  • C++中使用多线程

    使用的函数是CreateThread和CloseHandle相互配合。 举个简单的例子: 申明类变量 HANDLEhThread;DWORDThreadID; 在需要创建线程的地方使用: hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ThreadFunc,NULL,0,NULL); CloseHandle(hThread); 其中 ThreadFunc是一个回调函数,当然我试了,不管申明的是普通函数,还是类成员函数(需要使用static关键字,否则调用会报错),都不能直接操作窗体的控件,最后还的求助于消息映射SendMessage。不知道有没有方便一点的操作,大家有说是为了进程的安全机制,使得访问有点麻烦。复杂的操作,大家就使用自定义的消息映射吧。 提供我常用的思路: CStringstr="设置文本值"; HWNDhWnd=::FindWindow(NULL,"thread");//thread为窗体标题 HWNDhEdit=::GetDlgItem(hWnd,IDC_EDIT1);//根据控件Id CEd

  • 【Beyond Feelings】【第三周】 CHAPTER 2 What Is Critical Thinking? 部分个人理解(上)

    CHAPTER2WhatIsCriticalThinking? 章节初讲述一年级学生亚瑟被老师要求“思考”时的种种举动。年幼的他完全不法理解思考是一件怎样的事,于是他大声地咕哝,模仿他父亲发动引擎的声音,当然最后被老师叫停了,这并不是老师认为的思考。他开始模仿周围的同学————盯着天花板看,然而这也不是思考,这只是思考时的一个无意识的举动。我们的经历可能和亚瑟的经历有些许相似,许多人可能只是简单地告诉你要去思考,而没有解释一个好的思想家应该拥有怎样的思考方式,以及一个平凡的思想家又缺乏了什么样的品质。 第一部分Mind,Brain,orBoth? 许多现代科学家都在研究作为物质基础的大脑和人类无形的思想存在着怎样的联系,当然这也是哲学家思考的东西。有研究表明左大脑主要处理详细的语言处理和与分析和逻辑思维,右半球主要处理感官图像。但它并没有表明大脑足以自我进行思考。大脑本身具备了思考的能力,但它究竟是被动的,被动被人生经历填充,还是主动的,主动记录我们所见所闻的一切并引发思考? 第二部分CriticalThinkingDefined 当我们看到大卡车迎面撞过来时,我们会流露出恐惧,这种情

  • Dubbo这些很好用的功能你一定不知道!

    前言 Dubbo功能非常完善,很多时候我们不需要重复造轮子,下面列举一些你不一定知道,但是很好用的功能; 总结了一份dubbo资料文档分享给大家:关注公众号【程序媛小琬】即可获取。 直连Provider 在开发及测试环境下,可能需要绕过注册中心,只测试指定服务提供者,这时候可能需要点对点直连,点对点直连模式,将以服务接口为单位,忽略注册中心的提供者列表,A接口配置点对点,不影响B接口从注册中心获取列表(说明:官方只建议开发&测试环境使用该功能),用法如下,url指定的地址就是直连地址: <dubbo:referenceid="demoService"interface="com.alibaba.dubbo.demo.DemoService"version="1.0.0"url="dubbo://172.18.1.205:20888/"/> 多版本 当一个接口实现,出现不兼容升级时,可以用版本号过渡,版本号不同的服务相互间不引用,用法如下: <dubbo:serviceinterface="com.alibaba.dubbo.demo.DemoService"r

  • smooth-signature 使用经验

    https://github.com/linjc/smooth-signature 背景颜色 默认背景是透明的,因此实例化时需要主动设置背景颜色。 constcanvas=document.getElementById('signature') constpad=newSmoothSignature(canvas,{ bgColor:'#fff', }) 复制 旋转图像 SmoothSignature实例提供的getRotateCanvas()方法返回了一个Canvas实例,而非直接将SmoothSignature的画布做旋转。 constrotateCanvas=this.pad.getRotateCanvas(-90) constbase64Data=rotateCanvas.toDataURL() 复制

相关推荐

推荐阅读