精华内容
下载资源
问答
  • 制造型企业仓库KPI考核指标细则仓库主管必备.ppt
  • 制造型企业仓库的KPI考核指标细则(仓库主管必备).pptx
  • 学习数据仓库必要的书,废话不多说~~·~
  • 算法面试必备-----数据仓库常见面试题算法面试必备-----数据仓库常见面试题问题:简述数据仓库中的表的基本类型,以及为了保证引用完整性该以什么样的顺序对它们进行加载问题:事实表和维度表的概念及类型事实表的...

    算法面试必备-----数据仓库常见面试题

    算法面试必备-----数据仓库常见面试题

    问题:什么叫数据仓库?

    数据仓库是一个面向主题的(Subject Oriented)、集成的(Integrate)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合,它用于支持企业或组织的决策分析处理。

    数据仓库是为了便于多维分析和多角度展现而将数据按特定的模式进行存储所建立起来的关系型数据库,它的数据基于OLTP源系统。

    首先,用于支持决策,面向分析型数据处理,它不同于企业现有的操作型数据库;

    其次,对多个异构的数据源有效集成,集成后按照主题进行了重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改

    问题:数据仓库建模

    为什么需要数据仓库建模?

    数仓建模需要按照一定的数据模型,对整个企业的数据进行采集,整理,提供跨部门、完全一致的报表数据。

    合适的数据模型,对于大数据处理来讲,可以获得得更好的性能、成本、效率和质量。良好的模型可以帮助我们快速查询数据,减少不必要的数据冗余,提高用户的使用效率。

    数据建模进行全方面的业务梳理,改进业务流程,消灭信息孤岛,更好的推进数仓系统的建设。

    数据仓库建模方法?

    有四种模型:ER模型、维度模型、Data Vault模型、Anchor模型。用的较多的是维度模型和ER模型。

    1、ER模型

    ER模型用实体关系模型描述企业业务,在范式理论上满足3NF。数仓中的3NF是站在企业角度面向主题的抽象,而不是针对某个具体业务流程的实体对象关系的抽象。

    采用ER模型建设数据仓库模型的出发点是整合数据,将各个系统中的数据按照主题进行相似性整合,并进行一致性处理。

    ER模型特点
    需要全方位了解企业业务数据
    实施周期较长
    对建模人员要求教高

    2、维度建模

    维度建模按照事实表和维度表来构建数仓。

    维度建模从分析决策的需求出发构建模型,为分析需求服务。重点关注用户如何快速的完成数据分析,可以直观的反应业务模型中的业务问题,需要大量的数据预处理、数据冗余,有较好的大规模复杂查询的响应性能。

    事实表
    发生在现实世界中的操作性事件,其产生的可度量数值,存储在事实表中。从最细粒度级别来看,事实表的一行对应一个度量事件。事实表表示对分析主题的度量。‘

    事实表中包含了与各个维度表相关联的外键,可与维度表关联。事实表的度量通常是数值类型,且记录数不断增加,表数据量迅速增长。

    维度表
    维度表示分析数据时所用的环境。

    每个维度表都包含单独的主键列。维度表行的描述环境应该与事实表行完全对应。维度表通常比较宽,是扁平型的非规范表,包含大量的低粒度的文本属性。

    注意
    事实表的设计是以能够正确记录历史信息为准则

    维度表的设计是以能够以合适的角度来聚合主题内容为准则

    维度建模的三种模式
    星形模型:以事实表为中心,所有的维度直接连接在事实表上。由一个事实表和一组维度表组成。

    雪花模型:是对星形模型的扩展。雪花模型的维度表可以拥有更细的维度,比星形更规范一点。维护成本较高,且查询是要关联多层维表,性能较低

    星座模型:基于多张事实表,多张事实表共享维度信息

    维度建模步骤
    选择业务过程
    选择粒度
    选定事实表
    选择维度

    问题:数据湖的理解?

    数据湖是一个存储企业的各种各样原始数据的大型仓库,其中的数据可供存取、处理、分析及传输。
    在这里插入图片描述
    在这里插入图片描述

    问题:基本概念的解释:

    元数据:

    描述数据及其环境的数据。两方面用途:

    首先,元数据能提供基于用户的信息,如记录数据项的业务描述信息的元数据能帮助用户使用数据。

    其次,元数据能支持系统对数据的管理和维护,如关于数据项存储方法的元数据能支持系统以最有效的方式访问数据。

    元数据机制主要支持以下五类系统管理功能:

    (1)描述哪些数据在数据仓库中;

    (2)定义要进入数据仓库中的数据和从数据仓库中产生的数据;

    (3)记录根据业务事件发生而随之进行的数据抽取工作时间安排;

    (4)记录并检测系统数据一致性的要求和执行情况;

    (5)衡量数据质量。

    元数据的理解?

    https://www.jianshu.com/p/f7c26b4ebe3c

    狭义来讲就是用来描述数据的数据

    广义来看,除了业务逻辑直接读写处理的业务数据,所有其他用来维护整个系统运转所需要的数据,都可以较为元数据。

    定义:元数据metadata是关于数据的数据。在数仓系统中,元数据可以帮助数据仓库管理员和数据仓库开发人员方便的找到他们所关心的数据;元数据是描述数据仓库内部数据的结构和建立方法的数据。按照用途可分为:技术元数据、业务元数据。

    技术元数据

    存储关于数据仓库技术细节的数据,用于开发和管理数据仓库使用的数据

    1、数据仓库结构的描述,包括数据模式、视图、维、层次结构和导出数据的定义,以及数据集市的位置和内容

    2、业务系统、数据仓库和数据集市的体系结构和模式

    3、由操作环境到数据仓库环境的映射,包括元数据和他们的内容、数据提取、转换规则和数据刷新规则、权限等。

    业务元数据

    从业务角度描述了数据仓库中的数据,他提供了介于使用者和实际系统之间的语义层,使不懂计算机技术的业务人员也能读懂数仓中的数据。

    1、企业概念模型:表示企业数据模型的高层信息。整个企业业务概念和相互关系。以这个企业模型为基础,不懂sql的人也能做到心中有数

    2、多维数据模型。告诉业务分析人员在数据集市中有哪些维、维的类别、数据立方体以及数据集市中的聚合规则。

    3、业务概念模型和物理数据之间的依赖。业务视图和实际数仓的表、字段、维的对应关系也应该在元数据知识库中有所体现。

    元数据管理系统?

    元数据管理往往容易被忽视,但是元数据管理是不可或缺的。一方面元数据为数据需求方提供了完整的数仓使用文档,帮助他们能自主快速的获取数据;另一方面数仓团队可以从日常的数据解释中解脱出来,无论是对后期的迭代更新还是维护,都有很大的好处。元数据管理可以让数据仓库的应用和维护更加的高效。

    元数据管理功能

    数据地图:以拓扑图的形式对数据系统的各类数据实体、数据处理过程元数据进行分层次的图形化展示,并通过不同层次的图形展现。

    元数据分析:血缘分析、影响分析、实体关联分析、实体差异分析、指标一致性分析。

    辅助应用优化:结合元数据分析功能,可以对数据系统的应用进行优化。

    辅助安全管理:采用合理的安全管理机制来保障系统的数据安全;对数据系统的数据访问和功能使用进行有效监控。

    基于元数据的开发管理:通过元数据管理系统规范日常开发的工作流程

    数据管理标准

    对于相对简单的环境,按照通用的元数据管理标准建立一个集中式的元数据知识库

    对于比较复杂的环境,分别建立各部分的元数据管理系统,形成分布式元数据知识库,然后通过建立标准的元数据交换格式,实现元数据的集成管理。

    元数据管理系统

    自研

    apache atlas

    ODS: Operational Data Store

    ODS为企业提供即时的,操作型的,集成的数据集合,具有面向主题性,集成性,动态性,即时性,明细性等特点

    ODS作为数据库到数据仓库的一种过渡形式,与数据仓库在物理结构上不同,能提供高性能的响应时间,ODS设计采用混合设计方式。

    ODS中的数据是”实时值”,而数据仓库的数据却是”历史值”,一般ODS中储存的数据不超过一个月,而数据仓库为10年或更多.

    Data Mart

    为了特定的应用目的或应用范围,而从数据仓库中独立出来的一部分数据,也可称为部门数据或主题数据(subjectarea)。在数据仓库的实施过程中往往可以从一个部门的数据集市着手,以后再用几个数据集市组成一个完整的数据仓库。需要注意的就是在实施不同的数据集市时,同一含义的字段定义一定要相容,这样再以后实施数据仓库时才不会造成大麻烦。

    DDS(decision-support system)决策支持系统:

    用于支持管理决策的系统。通常,DSS包括以启发的方式对大量的数据单元进行的分析,通常不涉及数据更新。

    什么叫OLAP?用途是什么?

    联机分析处理,On-Line Analysis Processing 即从数据仓库中抽取详细数据的一个子集并经过必要的聚集,存储到OLAP存储器中供前端分析工具读取。

    OLAP系统按照数据存储格式可以分为关系OLAP(RelationalOLAP,简称ROLAP)、多维OLAP(MultidimensionalOLAP,简称MOLAP)和混合型OLAP(HybridOLAP,简称HOLAP)三种类型。

    ROLAP将分析要用的多维数据存储在关系数据库中,并根据应用的需要有选择的定义一批实视图也存储在关系数据库中

    MOLAP将OLAP分析所要用到的多维数据物理上存储为多维数组的形式,形成“立方体”的结构。

    HOLAP能把MOLAP和ROLAP两种结构的优点有机的结合起来,能满足用户各种复杂的分析请求。

    OLTP与OLAP的区别

    OLTP特点如下

    联机事务处理OLTP(on-line transaction processing)主要是执行基本的,日常的事务处理,比如数据库记录的增删改查,比如在银行存取一笔款,就是一个事务交易
    -1)实时性要求高
    2)数据量不是很大
    3)交易一般是确定的,所以是OLTP是对确定性的数据进行存取(比如存取款都有一个特定的金额)
    4)并发现要求高并且严格要求事物的完整性安全性(比如你和你的家人同时间在不同的银行取同一账户的钱)

    OLAP特点如下

    联机分析处理OLAP(on-line Analytical Processing)是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果.典型的应用就是复杂的动态报表系统
    1)实时性要求不是很高,很多应用的顶多是每天更新一下数据
    2)数据量大,因为OLAP支持的是动态查询,所以用户也许要通过很多数据的统计后才能得到想要的信息,例如时间序列分析等,所以处理的数据量很大
    3)因为重点在于决策支持,所以查询一般是动态的,也就是说允许用户随时提出查询的要求,所以在OLAP中通过一个重要概念维来搭建一个动态查询的平台或技术,供用户自己去决定需要知道什么信息

    简单来说:

    OLTP就是我们常说的关系型数据库,即记录即时的增删改查就是我们常用的,这是数据库的基础,TPCC(Transaction Processing Performance Council)属于此类
    OLAP即联机分析处理,是数据仓库的核心部分.所谓数据仓库是对于大量已经由OLTP形成的数据的一种分析型的数据库,用于处理商业智能,决策支持等重要的决策信息.数据仓库是在数据库应用到一定程度后对历史数据的加工与分析,读取较多,更新较少,TPCH属于此类,对于OLAP,列存储模式比通常的行存储模式可能更具有优势
    OLAP不应该对OLTP产生任何影响,(理想情况下)OLTP应该完全感觉不到OLAP的存在

    在这里插入图片描述

    OLAP和OLTP的模型方法的选择?

    OLTP系统是操作事物型系统,主要数据操作是随机读写,主要采用满足3NF的实体关系模型存储数据,在事物处理中解决数据的冗余和一致性问题。

    OLAP系统是分析型系统,主要数据操作是批量读写,不需要关注事务处理的一致性,主要关注数据的整合,以及复杂大数据量的查询和处理的性能。

    事实表

    事实表是包含大量数据值的一种结构。事实数据表可能代表某次银行交易,包含一个顾客的来访次数,并且这些数字信息可以汇总,以提供给有关单位作为历史的数据。

    每个数据仓库都包含一个或者多个事实数据表。事实数据表只能包含数字度量字段和使事实表与维度表中对应项的相关索引字段.,该索引包含作为外键的所有相关性维度表的主键。

    事实数据表中的“度量值”有两中:一种是可以累计的度量值,另一种是非累计的度量值。用户可以通过累计度量值获得汇总信息。

    维度表

    用来描述事实表的某个重要方面,维度表中包含事实表中事实记录的特性:有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,维度表包含帮助汇总数据的特性的层次结构

    缓慢变化维:在实际情况下,维度的属性并不是静态的,它会随着时间的流失发生缓慢的变化。

    处理方法: 1新信息直接覆盖旧信息,2,保存多条记录,并添加字段加以区分(用y,n;0,1,2或用时间来区别新旧记录)
    3.保存多条记录,并添加字段加以区分4.另外建表保存历史记录.5混合模式

    退化维

    般来说事实表中的外键都对应一个维表,维的信息主要存放在维表中。但是退化维仅仅是事实表中的一列,这个维的相关信息都在这一列中,没有维表与之相关联。比如:发票号,序列号等等。
    那么退化维有什么作用呢?
    1、退化维具有普通维的各种操作,比如:上卷,切片,切块等

    (上卷汇总,下钻明细;切片,切块:对二维数据进行切片,三维数据进行切块,可得到所需要的数据)
    2、如果存在退化维,那么在ETL的过程将会变得容易。
    3、它可以让group by等操作变得更快

    粒度:(granularity)

    是指数据仓库的数据单位中保存数据的细化或综合程度的级别,细化程度越高,粒度就越小。

    钻取:

    首先从某一个汇总数据出发,查看组成该数据的各个成员数据。

    KPI(Key Performance Indication)关键业绩指标用来衡量业绩好坏比如销售这个主题,销售增长率、销售净利润就是一个KPI

    E T L

    extract/transformation/load寻找数据,整合数据,并将它们装入数据仓库的过程。

    ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析的依据。

    工作流

    抽取 清洗,转换 加载 数据流 业务系统 ODS 数据仓库

    一.抽取

    方法有三种:1.利用工具,例如datastage,informatic,OWB,DTS,SISS. 2,利用存储过程. 3,前两种工具结合.

    抽取前的调研准备工作:1.弄清数据是从哪几个业务系统中来,各个业务系统的数据库服务器运行什么DBMS. 2.是否存在手工数据,手工数据量有多大。3.是否存在非结构化的数据。

    抽取中的数据处理方法:

    业务系统服务器与DW的DBMS相同时,在DW数据仓库服务器与原业条系统之间建立直接的链接关系就可以写select语句直接访问.

    业务系统服务器与DW的DBMS不同时,对不能建立直接链接的话,可以将源数据导入.txt文件,在导入ODS中,或通过程序接口来完成.

    对于文件类型数据源(.txt.xls)利用数据库工程将这个数据导入指定的数据库,如(oracle的SQL*LOADER,db2的import)

    如何实现增量抽取

    业务系统会记录业务发生的时间,我们可以用来做增量的标志,每次抽取之前首先判断ODS中记录最大的时间,然后根据这个时间去业务系统取大于这个时间所有的记录。

    二.清洗与转换

    清洗

    数据清洗的任务是过滤那些不符合要求的数据,将过滤的结果交给业务主管部门,确认是否过滤掉还是由业务单位修正之后再进行抽取。

    清洗的数据种类: 1,不完整数据,2,错误数据,3重复的数据.

    转换

    1.不一致数据转换:编码转换(m,f;男女);字段转换(balance,bal);度量单位的转换(cm,m)

    2.数据粒度的转换;业务系统数据存储非常明细的数据,而数据仓库中数据是用分析的,不需要非常明细,会将业务系统数据按照数据仓库粒度进行聚合.

    3.商务规则的计算.不同企业有不同的业务规则,不同的数据指标,在ETL过程,将这些数据计算好之后存储在数据仓库中,供分析使用(比如KPI)

    三.加载经过前两步处理后的数据可直接加载入数据仓库

    用过什么ETL工具(informatica,ssis,owb,datastage),以及该工具简单讲述特点。

    DataStage是一套专门对多种操作数据源的数据抽取、转换和维护过程进行简化和自动化,并将其输入数据集市或数据仓库目标数据库的集成工具。

    它有四个组件:Administrator:用来管理project和环境变量。Manager:用于job,表定义,的引导,引出。Designer:用来设计job。Direct:用运查看job运行日志。

    维度建模(dimensional modeling):

    是数据仓库建设中的一种数据建模方法。按照事实表,维表来构建数据仓库,数据集市。这种方法最被人广泛知晓的名字就是星型模式(Star-schema)。

    查找表

    什么叫查找表,为什么使用替代键?(其实目的和上面一样,从基础表到缓慢维度表的过程中的一种实现途径)

    替代键(alternate key)可以是数据表内不作为主键的其他任何列,只要该键对该数据表唯一即可。换句话说,在唯一列内不允许出现数据重复的现象。

    代理键:

    在关系型数据库设计中,是在当资料表中的候选键都不适合当主键时,例如资料太长,或是意义层面太多,就会用一个attribute来当代理主键,此主键可能是用流水号,来代替可辨识唯一值的主键

    在数据仓库领域有一个概念叫Surrogate key,中文一般翻译为“代理关键字”。代理关键字一般是指维度表中使用顺序分配的整数值作为主键,也称为“代理键”。代理关键字用于维度表和事实表的连接。可以避免通过主键的值就可以了解一些业务信息

    问题:数据仓库项目最重要或需要注意的是什么,以及如何处理?

    数据质量,主要是数据源数据质量分析,数据清洗转换,当然也可以定量分析

    数据仓库有**两个重要目的,**一是数据集成,二是服务BI

    数据准确性是数据仓库的基本要求,而效率是项目事实的前提,数据质量、运行效率和扩展性是数据仓库项目设计、实施高明与否的三大标志;

    问题:数据仓库的基本架构是什么?(数据源,ETL, data stage,ODS,data warehouse,datamart,OLAP等等)

    数据仓库系统体系结构

    1.数据源-> 2.ETL -> 3.数据仓库存储与管理-> 4.OLAP -> 5.BI工具

    数据源:是数据仓库系统的数据源泉,通常包括企业各类信息,包括存放于RDBMS中的各种业务处理数据和各类文档数据;各类法律法规、市场信息和竞争对手的信息等等;

    数据的存储与管理:数据的存储和管理是整个数据仓库的核心,是关键。数据仓库的组织管理方式决定了它有别于传统数据库,同时也决定了其对外部数据的表现形式。从数据仓库的技术特点着手分析,来决定采用什么产品和技术来建立数据仓库,然后针对现有各业务系统的数据,进行抽取、清理,并有效集成,按照主题进行组织。数据仓库按照数据的覆盖范围可以分为企业级数据仓库和部门级数据仓库(通常称为数据集市)。

    OLAP服务器:

    对需要的数据进行有效集成,按多维模型予以组织,以便进行多角度、多层次的分析,并发现趋势。其具体实现可以分为:ROLAP(关系型在线分析处理)、MOLAP(多维在线分析处理)和HOLAP(混合型线上分析处理)。ROLAP基本数据和聚合数据均存放在RDBMS之中;MOLAP基本数据和聚合数据均存放于多维数据库中;HOLAP基本数据存放于RDBMS之中,聚合数据存放于多维数据库中。

    前端工具:主要包括各查询工具、数据分析工具、数据挖掘工具、种报表工具以及各种基于数据仓库或数据集市的应用开发工具。

    数据分析工具主要针对OLAP服务器。报表工具、数据挖掘工具主要针对数据仓库。

    问题:如何构建数据仓库?

    数仓模型的选择是灵活的,不局限于某种模型方法。

    数仓数据是灵活的,以实际需求场景为导向。

    数仓设计要兼顾灵活性、可扩展性,要考虑技术可靠性和实现成本。

    https://www.zhihu.com/question/19703294

    1、系统分析,确定主题。通过与业务部门的交流,了解建立数仓要解决的问题,确认各个主题下的查询分析要求

    2、选择满足数据仓库系统要求的软件平台。选择合适的软件平台,包括数据库、建模工具、分析工具等

    3、建立数据仓库的逻辑模型。确定建立数据仓库逻辑模型的基本方法,基于主题视图,把主题视图中的数据定义转到逻辑数据模型中

    4、逻辑数据模型转换为数据仓库数据模型

    5、数据仓库数据模型优化。随着需求和数据量的变化进行调整

    6、数据清洗转换和传输。业务系统中的数据加载到数据仓库之前,必须进行数据的清洗和转换,保证数据仓库中数据的一致性。

    7、开发数据仓库的分析应用。满足业务部门对数据进行分析的需求。

    8、数据仓库的管理。包括数据库管理和元数据管理。

    问题:数据库及数据仓库模型设计的三个主要步骤

    概念数据模型CDM

    conceptual data model

    概念数据模型是最终用户对数据存储的看法,反映了最终用户综合性的信息需求,以数据类的方式描述企业级的数据需求。

    概念数据模型的内容包括重要的实体与实体之间的关系。在概念数据模型中不包含实体的属性,也不包含定义实体的主键

    概念数据模型的目标是统一业务概念,作为业务人员和技术人员之间沟通的桥梁,确定不同实体之间的最高层次的关系

    逻辑数据模型LDM

    logical data model

    逻辑数据模型反应的是系统分析设计人员对数据存储的观点,是对概念数据模型的进一步的分解和细化。逻辑数据模型是根据业务规则确定的,关于业务对象、业务对象的数据项以及业务对象之间关系的基本蓝图

    逻辑数据模型的内容包括所有的实体和关系,确定每个实体的属性,定义每个实体的主键,指定实体的外键,需要进行范式化处理。

    逻辑数据模型的目标是尽可能详细的描述数据,但并不考虑在物理上如何实现

    物理数据模型PDM

    physical data model

    物理数据模型是在逻辑数据模型的基础上,考虑各种具体的技术实现因素,进行数据库体系结构设计,真正实现数据在数据库中的存放。

    物理数据模型的内容包括确定所有的表和列,定义外键用于确认表之间的关系,基于用户的需求可能要进行反范式化等内容。

    问题:数据库和数据仓库有什么区别?

    1.数据是面向事务处的,数据是由日常的业务产生的,常更新;数据仓库是面向主题的,数据来源于数据库或文件,经过一定的规则转换得到,用来分析的。

    2.数据库一般是用来存储当前交易数据,数据仓库存储一般存储的是历史数据。

    3.数据库的设计一般是符合三范式的,有最大的精确度和最小的冗余度,有利于数据的插入; .数据仓库的设计一般是星型的,有利于查询。

    问题:构建企业级数据仓库五步法:

    一、 确定主题

    即确定数据分析或前端展现的主题(例:某年某月某地区的啤酒销售情况)。主题要体现出某一方面的各分析角度(维度)和统计数值型数据(量度)之间的关系,确定主题时要综合考虑.

    二、 确定量度

    确定主题后,需要考虑分析的技术指标(例:年销售额等等)。它们一般为数据值型数据,其中有些度量值不可以汇总;些可以汇总起来,以便为分析者提供有用的信息。量度是要统计的指标,必须事先选择恰当,基于不同的量度可以进行复杂关键性指标(KPI)的设计和计算。

    三、 确定事实数据粒度

    确定量度之后,需要考虑该量度的汇总情况和不同维度下量度的聚合情况.例如在业务系统中数据最小记录到秒,而在将来分析需求中,时间只要精确到天就可以了,在ETL处理过程中,按天来汇总数据,些时数据仓库中量度的粒度就是”天”。如果不能确认将来的分析需求中是否要精确的秒,那么,我们要遵循”最小粒度原则”,在数据仓库中的事实表中保留每一秒的数据,从而在后续建立多维分析模型(CUBE)的时候,会对数据提前进行汇总,保障产生分析结果的效率。

    四、 确定维度

    维度是分析的各个角度.例:我们希望按照时间,或者按照地区,或者按照产品进行分析。那么这里的时间,地区,产品就是相应的维度。基于不同的维度,可以看到各个量度汇总的情况,也可以基于所有的维度进行交叉分析。

    维度的层次(Hierarchy)和级别(Level)。例:在时间维度上,按照”度-季度-月”形成了一个层次,其中”年” ,”季度” ,”月”成为了这个层次的3个级别。我们可以将“产品大类-产品子类-产品”划为一个层次,其中包含“产品大类”、“产品子类”、“产品”三个级别。

    我们可以将3个级别设置成一张数据表中的3个字段,比如时间维度;我们也可以使用三张表,分别保存产品大类,产品子类,产品三部分数据,比如产品维度。

    建立维度表时要充分使用代理键.代理键是数据值型的ID号码(每张表的第一个字段),它唯一标识了第一维度成员。在聚合时,数值型字段的匹配和比较,join效率高。同时代理键在缓慢变化维中,起到了对新数据与历史数据的标识作用。

    五、 创建事实表

    在确定好事实数据和维度后,将考虑加载事实表。业务系统的的一笔笔生产,交易记录就是将要建立的事实表的原始数据.

    我们的做法是将原始表与维度表进行关联,生成事实表。关联时有为空的数据时(数据源脏),需要使用外连接,连接后将各维度的代理键取出放于事实表中,事实表除了各维度代理键外,还有各度量数据,不应该存在描述性信息。

    事实表中的记录条数据都比较多,要为其设置复合主键各蛇引,以实现数据的完整性和基于数据仓库的查询性能优化。

    问题:什么是数据中台?

    数据中台是指通过数据技术,对海量数据进行采集、计算、存储、加工,同时统一标准和口径。数据中台吧数据统一之后,会形成标准数据,再进行存储,形成大数据资产层,进而为客户提供高效服务。

    这些服务和企业的业务有较强的关联性,是企业所独有且能复用的,它是企业业务和数据的积淀,其不仅能降低重复建设,减少烟囱式协作的成本,也是差异化竞争的优势所在。

    数据中台通过整合公司开发工具、打通全域数据、让数据持续为业务赋能,实现数据平台化、数据服务化和数据价值化。数据中台更加侧重于“复用”与“业务”。

    问题:如何建设数据中台?

    http://baijiahao.baidu.com/s?id=1651988047250956280&wfr=spider&for=pc

    数据中台在企业落地实践时,结合技术、产品、数据、服务、运营等方面,逐步开展相关工作。
    在这里插入图片描述
    1、理现状。了解业务现状、数据现状、IT现状、现有的组织架构
    2、定架构。确认业务架构、技术架构、应用架构、组织架构
    3、建资产。建立贴近数据层、统一数仓层、标签数据层、应用数据层
    4、用数据。对数据进行输出、应用。
    5、数据运营。持续运营、持续迭代

    进,由技术和业务人员去执行和落地是一个漫长的过程,在实施数据中台时,最困难的地方就是需要有人推动。中台建设需要有全员共识,由管理层从上往下推

    问题:数据中台、数据仓库、大数据平台的关键区别是什么?

    基础能力上的区别
    数据平台:提供的是计算和存储能力

    数据仓库:利用数据平台提供的计算和存储能力,在一套方法论指导下建设的一整套的数据表

    数据中台:包含了数据平台和数据仓库的所有内容,将其打包,并且以更加整合以及更加产品化的方式对外提供服务和价值。

    业务能力上的区别
    数据平台:为业务提供数据主要方式是提供数据集

    数据仓库:相对具体的功能概念是存储和管理一个或多个主题数据的集合,为业务提供服务的方式主要是分析报表

    数据中台:企业级的逻辑概念,提现企业数据产生价值的能力,为业务提供服务的主要方式是数据API

    总的来说,数据中台距离业务更近,数据复用能力更强,能为业务提供速度更快的服务。数据中台是在数据仓库和数据平台的基础上,将数据生产为一个个数据API服务,以更高效的方式提供给业务。数据中台可以建立在数据仓库和数据平台之上,是加速企业从数据到业务价值的过程的中间层。

    问题:大数据的一些相关系统?

    数仓设计中心:按照主题域、业务过程,分层的设计方式,以维度建模作为基本理论依据,按照维度、度量设计模型,确保模型、字段有统一的命名规范

    数据资产中心:梳理数据资产,基于数据血缘,数据的访问热度,做成本的治理

    数据质量中心:通过丰富的稽查监控系统,对数据进行事后校验,确保问题数据第一时间被发现,避免下游的无效计算,分析数据的影响范围。

    指标系统:管理指标的业务口径、计算逻辑和数据来源,通过流程化的方式,建立从指标需求、指标开发、指标发布的全套协作流程

    数据地图:提供元数据的快速索引,数据字典、数据血缘、数据特征信息的查询,相当于元数据中心的门户。

    问题:数仓中是如何划分主题的

    主题(subject)是在较高层次上将企业信息系统中的数据进行综合,归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域.在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象.例如销售分析就是一个分析领域,因此这个数据仓库应用的主题就是销售分析

    主题是根据分析的要求来确定的.这与按照数据处理或应用的要求来组织数据是不同的.如在生产企业中,同样是材料供应,在操作型数据库系统中,人们所关心的是怎样更方便和更快捷的进行材料供应的业务处理,而在进行分析处理时,人们就应该关心材料的不同采购渠道和材料供应是否及时及材料质量状况等

    问题:数仓如何确定主题域?

    https://www.jianshu.com/p/708f5606dd01

    主题

    主题是在较高层次上将数据进行综合、归类和分析利用的一个抽象概念,每一个主题基本对应一个宏观的分析领域。在逻辑意义上,它是对企业中某一宏观分析领域所涉及的分析对象。

    面向主题的数据组织方式,就是在较高层次上对分析对象数据的一个完整并且一致的描述,能刻画各个分析对象所涉及的企业各项数据,以及数据之间的联系。

    主题是根据分析的要求来确定的。

    主题域

    从数据角度看(集合论)
    主题语通常是联系较为紧密的数据主题的集合。可以根据业务的关注点,将这些数据主题划分到不同的主题域。主题域的确定由最终用户和数仓设计人员共同完成。

    从需要建设的数仓主题看(边界论)
    主题域是对某个主题进行分析后确定的主题的边界。

    数仓建设过程中,需要对主题进行分析,确定主题所涉及到的表、字段、维度等界限。

    确定主题内容

    数仓主题定义好以后,数仓中的逻辑模型也就基本成形了,需要在主题的逻辑关系中列出属性和系统相关行为。此阶段需要定义好数据仓库的存储结构,向主题模型中添加所需要的信息和能充分代表主题的属性组。

    问题:数仓分层

    一般情况下,将数据模型分为3层:

    1.源数据层ODS
    存放的是接入的原始数据
    经过ETL之后装入本层,大多是按照源头业务系统的分类方式而分类的.为了考虑后续可能追溯数据,因此对这一层不建议做过多的数据清洗工作,原封不动接入元数据即可,至于数据的去噪,去重,异常处理等过程可以放在后面的DW层

    2.数据仓库层DW
    重点设计的数据仓库中间层数据,在这里ODS层获得的数据按照主题建立各种数据模型,DW又细分:

    1)数据明细层:DWD(Data Warehouse Detail):
    该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证,同时为了提高数据明细层的易用性,该层会采用一些维度退化手法,将维度退化到事实表中,减少事实表和维度表的关联.另外在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性

    2)数据中间层DWM(Data Warehouse Middle):
    在DWD层的数据基础上,对数据做轻度的聚合操作,生成一系列的中间表提升公共指标的复用性,减少重复加工,直观来说,就是对通用的核心维度进行聚合操作,算出相应的统计指标

    3)数据服务层:DWS(Data Warehouse Service)
    又称为数据集市或者宽表,按照业务划分,例如流量,订单,用户等,生成字段比较多的宽表,用于后续的业务查询,OLAP分析,数据分析等

    3.数据应用层APP:面向业务定制的应用数据
    主要提供给数据铲平和数据分析使用的数据,一般会放在ES,MYSQL,Redis等系统供线上系统使用,也可以放在Hive中供数据分析和数据挖掘使用

    补充:维表层 Dimension
    1,高基数维度数据:一般是用户资料表,商品资料表类似的资料表。数据量可能是千万级或者上亿级别
    2,低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万

    问题:简述数据仓库中的表的基本类型,以及为了保证引用完整性该以什么样的顺序对它们进行加载

    答:数据仓库中的表的基本类型有维度表、事实表、子维度表、桥接表等几类。其中子维度表即雪花模型由支架维度技术处理,桥接表用来处理多值维度或层级结构。

    数据仓库中需要加载的各类表之间有相互依赖的关系,所以加载时需要以一定的顺序进行加载。下面是一些加载的基本原则:
    子维度表加载成功后,再加载维度表。
    维度表加载成功后,再加载桥接表。
    子维度表、维度表和桥接表都加载成功后,再加载事实表。
    这个加载顺序可以通过主外键的关系来确定。(注意,此回答为总线架构的数据仓库的表的加载顺序。)

    问题:事实表和维度表的概念及类型

    事实表的概念

    Ø 每个数据仓库都包含一个或者多个事实数据表。

    Ø 事实数据表可能包含业务销售数据,如现金登记事务所产生的数据,事实数据表通常包含大量的行

    Ø 一般事实表中只存放数字或者一些Flag用来统计(Count),如收益、数量、支出等

    事实的类型

    1、粒度事实表(Additive Fact)
    2、周期快照事实表(Semi-Additive Fact)
    3、聚合快照事实表(Non-Additive Fact)
    4、非事实事实表(Factless Fact Table)

    1、粒度事实表(AdditiveFact):
    } 表示的是在特定时间、空间点上的一次瞬间的测量。与粒度同层次的事实表,可以直接将事实字段进行Sum,Count等聚合操作

    } 在事实表的设计时,一定要注意一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。

    } 交易粒度事实表的来源伴随交易事件成生的数据,例如销售单。在ETL过程中,以原子粒度直接进行迁移。

    2、周期快照事实表(Semi-AdditiveFact)
    } 周期快照事实表表现的是一个时间段,或者规律性的重复。这类表非常适合跟踪长期的过程,例如银行账户和其他形式的财务报表。最常用的财务上的周期快照事实表通常有一个月粒度。在周期快照事实表中的数据必须符合该粒度(就是说,他们必须量测的是同一个时间段中的活动)。对于一个好的周期快照事实表来说就是在粒度上有更多的事实。

    } 在ETL过程中,以固定的时间间隔生成累计数据。

    3、聚合快照事实表(Non-AdditiveFact):

    } 聚合快照事实表用于描述那些有明确开始和结束的过程,例如合同履行,保单受理以及常见的工作流。聚合快照不适合长期连续的处理,如跟踪银行账户或者描述连续的生产制造过程,如造纸。

    } 聚合快照事实表的粒度是一个实体从其创建到当前状态的完整的历史。

    } 在ETL过程中,随着业务处理过程的步骤逐步完善该表中的记录。

    非事实事实表(FactlessFact Table):
    } 每个事实表的粒度是一个事件量测。用来描述数据或事件。事件可以发生,但是没有具体的测量值。

    维度表

    Ø 维度表可以看作是用户来分析数据的窗口,

    Ø 维度表中包含事实数据表中事实记录的特性,有些特性提供描述性信息,有些特性指定如何汇总事实数据表数据,以便为分析者提供有用的信息,

    Ø 维度表包含帮助汇总数据的特性的层次结构。

    维度分类

    维度的类型:
    1、缓慢变化维(Slowly Changing Dimension)

    2、快速变化维(Rapidly Changing Dimension)

    3、大维(Huge Dimension)和迷你维(Mini-Dimension)

    4、退化维(Degenerate Dimension)

    1、缓慢变化维(SCD):
    } 大多数的维度的内容都会有不同程度的改变。比如:
    } 雇员的升职
    } 客户更改了他的名称或地址
    } 我们如何去处理这些维度中的变化呢?
    } 下面提供了三个处理缓慢变化维的方式
    } 直接更新到原先记录中
    } 标记记录有效时间的开始日期和结束日期,加入版本控制
    } 在记录中添加一个字段来记录历史

    2、快速变化维(FCD):
    } 当某个维度的变化是非常快的时候,我们认定他为快速变化维(具体要看实际的变化频率),比如:
    } 产品的价格,地产的价格等
    } 例如在一个分析用户如何使用搜索引擎的DW项目中,将用户搜索的关键字作为一个维度。由于用户使用的关键字会快速变化,因此关键字维度中的数据量会迅速增加。
    } 另外一个例子就是精度为秒的时间维度,每秒就会增加一个维度值
    通常RCD的处理可以分为3类:
    Rapidly Changing Small Dimensions – 即维度表字段并不多,表的数据量也不大的情况。这种情形应用SCD中的Type2就可以了。(即:新增一行,旧行置过期)
    Rapidly Changing Large Dimensions – 即维度表字段较多,表的数据量较大的情况。这种情形Type2会增加过多的行并导致效率降低,因此通常采用Type3.(新增列:仅保存上一个值previous_value,current_value)
    Rapidly Changing Monster Dimensions – 最糟糕的情况,即维度表字段较多,表的数据量很大,且维度表中的一部分字段频繁变化的情况。此时应将相对稳定的字段和频繁变化的字段分割开,频繁变化的字段独立出来形成新的维度表与事实表相连或形成新的雪花关系。(维表分离)

    3、大维度(HugeDimension):
    } 数据仓库中最有意思的维度是一些非常大的维度,比如客户,产品等等。一个大的企业客户维度往往有上百万记录,每条记录又有上百个字段。而大的个人客户维度则会超过千万条记录,这些个人客户维度有时也会有十多个字段,但大多数时候比较少见的维度也只有不多的几个属性。
    } 大维度需要特殊的处理。由于数据量大,很多涉及大维度数据仓库功能可能会很慢,效率很低。你需要采用高效率的设计方法、选择正确的索引、或者采用其它优化技术来处理以下问题,包括:
    向大维度表填充数据
    非限制维度的浏览性能,尤其是那些属性较少的维度
    多限制的维度属性值的浏览时间
    涉及大维度表的对事实表查询的低效率问题
    为处理第二类修改所需要增加的额外的记录
    4、迷你维(MiniDimension):
    } 将常用的大维度中的少数字段提取出来,形成一个字段少的维度,在查询的时候便可以使用迷你维中的字段
    } 这样的设计明显提高查询效率

    普通维:
    普通维是基于一个维表的维度,由维表中的不同列来表示维度中的不同级别。

    雪花维:
    雪花维是基于多个维表的维度,各个维表间以外键关联,分别存储在同一维度中不同级别的成员列值。

    父子维:
    父子维是基于两个维表列的维度,由维表中的两列来共同定义各个成员的隶属关系,一列称为成员键列,标识每个成员,另一列称为父键列,标识每个成员的父代。
    父子维度通俗的话来讲,这个表是自反 的,即外键本身就是引用的主键;类似这样的关系,如公司组织结构,分公司是总公司的一部分,部门是分公司的一部分,当然如果定义得好的话员工是部门的一部 分;通常公司的组织架构并非处在等层次上的,例如总公司下面的部门看起来就和分公司是一样的层次。因此父子维的层次通常不固定的。
    因为父子维的复杂的自引用关系,如果按照缓慢维度的全历史记录方式来处理,必然导致逻辑关系混乱,处理起来比较棘手;任何一个组织的变动 (修改名称,更改引用,新增等等操作 )将会引起其下属节点相应的变动;任何一个意外都会导致整个结构的变化,同时发生意外后所带来的逻辑关系很难理顺。而 SQLServer2000中 Analysis Service对于这种急剧的变化处理并不稳定。
    因此建议按照缓慢变化维的覆盖方式解决,即只根据主键这个唯一标志进行判断是否是新增还是修改。

    索引:
    与在其他关系数据库中一样,索引对数据仓库的性能具有重要作用。每个维度表都必须在主键上建立索引。在其他列如标识层次结构级别的列上,索引对于某些专用查询的性能也很游泳。事实数据表必须在由维度表外键构成的组件主键上建立索引。

    粒度(Grain) 层次(Hierarchy):
    Ø 粒度是指数据仓库的数据单位中保存数据的细化或综合程度的级别。细化程度越高,粒度级就越小;相反,细化程度越低,粒度级就越大。设计粒度是设计数据仓库中的一个重要的前提
    Ø 层次指描述明细数据的层次
    一些影响维度建模的因素:
    Ø 数据或展现的安全性
    Ø 复杂的查询和分析

    问题:星型模型和雪花模型区别

    星形模型(Star Schema):
    Ø 事实被维度所包围,且维度没有被新的表连接
    Ø 星形模型是一个比较折中的的建模方式(BIAPPS中都是用的是星形的建模方式)

    雪花模型(Snowflake Schema):
    } 事实表被多个维表或一个或多个层次所包围
    } 雪花模型一般在处理大的且相对静态的层次的时候使用

    根据事实表和维度表的关系,又可将常见的模型分为星型模型和雪花型模型。

    星形模型概念:当所有维度表连接到事实表上的时候,整个图就像一个星星,故称之为星型模型。星型架构是一种非正规化的结构,多维数据集的每一个维度都直接与事实表相连,不存在渐变维度,所以数据有一定冗余。因为有冗余,所以很多统计不需要做外部的关联查询,因此一般情况下效率比雪花模型高。

    雪花模型概念:当有多个维度表没有直接连接到事实表上,而是通过其他维度表连接到事实表上时,其图形就像雪花,故称雪花模型。雪花模型的优点是减少了数据冗余,所以一般情况下查询需要关联其他表。在冗余可接受的前提下使用星型模型。

    星型模型和雪花模型的区别在于:维度表是直接连接到事实表还是其他维度表。

    问题:拉链表使用场景和实现方式?

    拉链表使用场景:需要查看历史某一时间节点的状态,同时考虑到存储空间。

    实现方式
    首先是拉链表dw_order_his的设置,有start_date和end_date两个字段;
    其次在ods层创建一个ods_order_update表,储存当变化数据(包括insert和update的数据)
    源表(order)
    ods_order_update表和dw_order_his表的交集进行封链操作,end_date=current_date
    ods_oder_update数据插入到his表中,对于记录的end_date=9999-12-31,start_date=current_date

    【使用场景】
    在数据仓库的数据模型设计过程中,经常会遇到下面这种表的设计:
     有一些表的数据量很大,比如一张用户表,大约10亿条记录,50个字段,这种表,即使使用ORC压缩,单张表的存储也会超过100G,在HDFS使用双备份或者三备份的话就更大一些。
     表中的部分字段会被update更新操作,如用户联系方式,产品的描述信息,订单的状态等等。
     需要查看某一个时间点或者时间段的历史快照信息,比如,查看某一个订单在历史某一个时间点的状态。
     表中的记录变化的比例和频率不是很大,比如,总共有10亿的用户,每天新增和发生变化的有200万左右,变化的比例占的很小。

    【实现方式】
    全量主要数据表加载的策略为每次加载时需要根据主键将目标表的数据与源表数据进行比对,删除目标表中在源数据表中的相关记录,然后将源表数据全部插入目标表。表现在脚本上为先delete相关记录,然后insert所有记录。主表加载策略主要用于大部分主表的加载,比如客户信息等主要数据表。
    增量拉链是指每次加载时,将源表数据视为增量抽取后的结果,加载到目标表时需要考虑数据历史情况。一般数据发生变化时关闭旧数据链,然后开新数据链。增量拉链针对的是历史表情况,由于数据仓库中记录了大部分数据历史表变化情况,因此增量拉链加载策略在数据仓库中是使用比较广泛的一种加载策略。通常这种历史表都含有start_date和end_date字段,首先全字段对比源数据和目标表得出真正的增量数据,这里的全字段不包含start_date和end_date字段,然后根据主键对目标表进行关旧链操作,然后对新增数据开新链,这种拉链策略同样可以处理全量数据。

    问题:拉链表性能优化

    拉链表当然也会遇到查询性能的问题,比如说我们存放了5年的拉链数据,那么这张表势必会比较大,当查询的时候性能就比较低了,个人认为两个思路来解决:

    1、在一些查询引擎中,我们对start_date和end_date做索引,这样能提高不少性能。

    2、保留部分历史数据,比如说我们一张表里面存放全量的拉链表数据,然后再对外暴露一张只提供近3个月数据的拉链表。

    问题:缓慢变化维的设计?

    三种:直接覆盖,增加新行,增加新属性列

    Type 1:直接覆盖:直接用新值代替旧值。

    Type 2:增加新行。将当前行的状态设置为off,并设置一个endtime时间戳,将当前时间标记上。
    同时新增1行,将其状态标记为on,设置begintime时间戳为上一个记录的endtime+1。

    Type 3:增加新列:给表增加一个新列,来存储新值,同时保留原来的值不变。

    问题:数据相关问题:

    如何控制数据质量?

    校验机制,每天进行数据量的比对 select count(*),早发现,早修复
    数据内容的比对,抽样比对
    复盘、每月做一次全量

    如何做数据治理?

    https://www.jianshu.com/p/44d7618f32b6

    数据治理不仅需要完善的保障机制,还需要理解具体的治理内容,比如数据应该怎么进行规范,元数据该怎么来管理,每个过程需要那些系统或者工具来配合?

    数据治理领域包括但不限于以下内容:数据标准、元数据、数据模型、数据分布、数据存储、数据交换、数据声明周期管理、数据质量、数据安全以及数据共享服务。
    在这里插入图片描述

    模型设计的思路?业务驱动?数据驱动?

    构建数据仓库有两种方式:自上而下、自下而上

    Bill Inmon推崇自上而下的方式,一个企业建立唯一的数据中心,数据是经过整合、清洗、去掉脏数据、标准的、能够提供统一的视图。要从整个企业的环境入手,建立数据仓库,要做很全面的设计。偏数据驱动

    Ralph Kimball推崇自下而上的方式,认为数据仓库应该按照实际的应用需求,架子啊需要的数据,不需要的数据不要加载到数据仓库中。这种方式建设周期短,用户能很快看到结果。偏业务驱动

    数据质量管理

    https://blog.csdn.net/kuangfeng88588/article/details/99085074

    数据质量管理是对数据从计划、获取、存储、共享、维护、应用、消亡生命周期的每个阶段里可能引发的数据质量问题,进行识别、度量、监控、预警等,通过改善了提高组织的管理水平使数据质量进一步提高。

    数据质量管理是一个集方法论、技术、业务和管理为一体的解决方案。放过有效的数据质量控制手段,进行数据的管理和控制,消除数据质量问题,从而提高企业数据变现的能力。

    会遇到的数据质量问题:数据真实性、数据准确性、数据一致性、数据完整性、数据唯一性、数据关联性、数据及时性

    什么是数据模型?

    数据模型就是数据组织和存储的方法,通过抽象的实体以及实体间联系的形式来表达现实世界中事务的相互关系的一种映射,他强调从业务、数据存取和使用角度合理的存储数据。

    展开全文
  • 使用maven时,一直在下载仓库,模板,插件,等了半个小时还没有好,烦死了! 因为Maven服务器在国外,所以在国内不方便访问,好在阿里云搭建了国内的maven仓库,感谢阿里。 仓库地址:aliyun Maven:...

    使用maven时,一直在下载仓库,模板,插件,等了半个小时还没有好,烦死了!

    因为Maven服务器在国外,所以在国内不方便访问,好在阿里云搭建了国内的maven仓库,感谢阿里。

    仓库地址:aliyun Maven:http://maven.aliyun.com/nexus/#view-repositories

    我们更改仓库访问服务器为阿里的即可,在maven的settings.xml 配置文件里添加mirrors的子节点:   

    <mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

    以上解决了仓库问题,下面来解决maven的archetype模板加载非常慢的问题:

    原因: 


    maven archetype的本质是执行mvn archetype:generate命令,该命令执行时,需要指定一个archetype-catalog.xml文件。

    该命令的参数-DarchetypeCatalog,可选值为:remote,internal ,local等,用来指定archetype-catalog.xml文件从哪里获取。 
    remote——指向Maven中央仓库的Catalog ,默认为remote,即从官网下载 http://repo1.maven.org/maven2/archetype-catalog.xml。
    internal——maven-archetype-plugin内置的 
    local——本地的,位置为:用户目录/.m2/archetype-catalog.xml 

    解决方法:和上面一样,连不上国外服务器,改成使用内置的internal,即可解决,更改方法有2种。

     

    第一种:

    在创建Maven项目时在配置里面加上 archetypeCatalog=internal 参数。

     

    第二种:

    在maven的设置里面的Runner的VM Options配置加上 :

    -DarchetypeCatalog=internal

     

    展开全文
  • 自动化部署必备技能—搭建YUM仓库

    千次阅读 2017-03-14 13:42:46
    要成功的使用YUM工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库),这个软件仓库我们习惯称为yum源。网络上有大量的yum源,但由于受到网络环境的限制,导致软件安装耗时过长甚至失败...

    M主要用于自动安装、升级rpm软件包,它能自动查找并解决rpm包之间的依赖关系。要成功的使用YUM工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库),这个软件仓库我们习惯称为yum源。网络上有大量的yum源,但由于受到网络环境的限制,导致软件安装耗时过长甚至失败。特别是当有大量服务器大量软件包需要安装时,缓慢的进度条令人难以忍受。因此我们在优化系统时,都会更换国内的源。

        相比较而言,本地YUM源服务器最大优点是局域网的快速网络连接和稳定性。有了局域网中的YUM源服务器,即便在Internet连接中断的情况下,也不会影响其他YUM客户端的软件安装和升级。

    1.1 服务端配置

    mkdir -p
    /application/yum/centos6/x86_64/    ß1.创建yum仓库目录,rpm包都上至此目录

    yum -y install createrepo                ß2.安装createrepo软件

    createrepo -pdo
    /application/yum/centos6/x86_64/ /application/yum/centos6/x86_64/            ß3.初始化repodata索引文件

    cd /application/yum/centos6/x86_64/       ß4.进入需要提供仓库的目录

    python -m SimpleHTTPServer 80 &>/dev/null &   ß5.可以用Apachenginx提供web服务,但用Pythonhttp模块更简单,适用于内网环境可以通过浏览器输入本机IP查看。

    createrepo --update /application/yum/centos6/x86_64/        ß6.每加入一个rpm包就要更新一下

    sed -i 's#keepcache=0#keepcache=1#g'
    /etc/yum.conf          ß修改yum配置文件keepacache=0改为1,保存下载过的软件

    cachedir=/var/cache/yum/$basearch/$releasever         ß安装包存储目录=
    /var/cache/yum/x86_64/6/base/packages

    1.2客户端配置

    cd /etc/yum.repos.d

    [root@B yum.repos.d]# vi oldboy.repo          ß连接本地yum

    [xuliangwei]

    name=Server

    baseurl=http://10.0.0.5

    enable=1

    gpgcheck=0

    [root@YUM ~]# yum
    --enablerepo=xuliangwei--disablerepo=base,extras,updates,epel list ß指定使用xuliangwei(临时生效)

    [root@oldboy yum.repos.d]# vim
    /etc/yum.repos.d/CentOS-Base.repo

    # 在每一个启动的源加上

    # enabled=0#改为1就启用,没有此参数也是启用。

    [base]

    …………

    enabled=0

     

    [updates]

    …………

    enabled=0

     

    [extras]

    …………

    enabled=0

    # 还有其他开启的仓库就使用这个办法关闭

    2.Yum服务配置文件

    2.1全局配置文件


    main部分定义了全局配置选项,整个yum配置文件应该只有一个main,位于/etc/yum.cof

    [root@XuBuSi ~]# cat /etc/yum.conf

    [main]

    cachedir=/var/cache/yum/$basearch/$releasever         ßyum缓存的目录,存储下载的rpm包和数据库

    keepcache=0   ß安装完成后是否保留软件包,0为不保留(默认为0)1为保留

    debuglevel=2   ßDebug信息输出等级,范围为0-10,缺省为2

    logfile=/var/log/yum.log ß日志文件位置

    exactarch=1     ß10两个选项,设置为1,则yum只会安装和系统架构匹配的软件包。

    obsoletes=1     ß update的参数,相当于upgrade,允许更新陈旧的RPM包。

    gpgcheck=1     ß

    plugins=1 ß是否启用插件,默认1为允许,0表示不允许

    installonly_limit=5

    bugtracker_url=http://bugs.centos.org/set_project.php?project_id=16&ref=http://bugs.centos.org/bug_report_page.php?category=yum

    distroverpkg=centos-release ß指定一个软件包,yum会根据这个包判断发行版本


    2.2yum仓库配置文件

    repository部分定义了每个源服务器的具体配置,可以有一到多个,位于/etc/yum.repos.d/目录下的各文件中

    [root@XuBuSi ~]# ll /etc/yum.repos.d/

    CentOS-Base.repo   ß网络源的配置文件

    CentOS-Media.repo         ß本地源的配置文件

    epel.repo ß第三方源的配置文件

    2.3配置本地yum源

    [root@XuBuSi ~]# grep -v "^#"
    /etc/yum.repos.d/CentOS-Media.repo

     

    [c6-media]

    name=CentOS-$releasever - Media

    baseurl=file:///media/CentOS/

    file:///media/cdrom/       ß修改为/mnt/cdrom(即为光盘挂载点)

    file:///media/cdrecorder/

    gpgcheck=1

    enabled=0 ß改为1就启动,没有此参数也是启用。

    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

    #当然也可以像上面自己写一个文件,然后指定为下载点即可。

    3.企业yum仓库搭建实战

    上面只是将自己制作的rpm包,放入yum源。但还有一种企业需求,说的更具体一点,平时学生上课yum安装软件都是从公网下载的,占用带宽,因此在学校里搭建一个内网yum服务器,但又考虑到学生回家也要使用yum安装软件,如果yum软件的数据库文件repodata不一样,就会有问题。因此我想到的解决方法就是直接使用公网yum源的repodata。

     

    镜像同步公网yum源上游yum源必须要支持rsync协议,否则不能使用rsync进行同步。http://mirrors.ustc.edu.cn/status/

    CentOS官方标准源:rsync://mirrors.ustc.edu.cn/centos/

    epel源:rsync://mirrors.ustc.edu.cn/epel/

    同步命令:

    使用rsync同步yum源,为了节省带宽、磁盘和下载时间,我只同步了CentOS6rpm包,这样所有的rpm包只占用了21G,全部同步需要300G左右。

    同步base源,小技巧,我们安装系统的光盘镜像含有部分rpm包,大概3G,这些就不用重新下载。

    /usr/bin/rsync -av
    rsync://mirrors.ustc.edu.cn/centos/6/os/x86_64/
    /data/yum_data/centos/6/os/x86_64/

    /usr/bin/rsync -av
    rsync://mirrors.ustc.edu.cn/centos/6/extras/x86_64/
    /data/yum_data/centos/6/extras/x86_64/

    /usr/bin/rsync -av rsync://mirrors.ustc.edu.cn/centos/6/updates/x86_64/
    /data/yum_data/centos/6/updates/x86_64/

    # epel源

    /usr/bin/rsync -av --exclude=debug
    rsync://mirrors.ustc.edu.cn/epel/6/x86_64/ /data/yum_data/epel/6/x86_64/

    学生使用内网yum源方法

    # 可以自建一个内网dns,如果没有,可使用hosts解析。

    echo
    '192.168.0.200 mirrors.aliyun.com' >>/etc/hosts


    展开全文
  • ) 等)写了一些代码,想进行版本控制,以将来不时之需。 自己的一些资料,可能需要时常更新,但又想保留历史版本(比如我自己,就有一份专门记录所有常用密码的txt文件) 对于这种需求,我们自然而然的会想到一些 ...

    作为一名程序猿,可能大家都遇到过这种需求:

    • 自己在业余时,出于某些目的(比如,学习、私活 ;) 等)写了一些代码,想进行版本控制,以备将来不时之需。
    • 自己的一些资料,可能需要时常更新,但又想保留历史版本(比如我自己,就有一份专门记录所有常用密码的txt文件)

    对于这种需求,我们自然而然的会想到一些 VCS (Version Control System)来实现。

    就我自己的实践而言,之前在使用 SVN 时,这点很好实现。大体步骤有以下几步(以 win 系统为例说明):

    下载 TortoiseSVN.exe (我的是 1.9.3 版本,如下图),并进行安装

    TortoiseSVN

    新建一个文件夹,如 test (假设 全路径为: E:\test), 作为仓库
    test 文件夹中右键,选择 Create repository here 菜单,如下图

    初始化仓库

    在其他想导出这个仓库的地方,新建一个文件夹 123 (假设全路径为 E:\123)。在 123 文件夹中右键,选择 SVN Checkout 菜单,如下图

    导出仓库

    在弹出的对话框中,填入以下内容

    仓库地址&目的地信息

    然后,就可以在 123 这个文件夹中,新建&修改&删除 文件,并提交至 svn 进行版本控制了啊。下图为新建文件的示例。

    新建文件并上传

    新建文件并上传

    新建文件并上传

    以上就是 svn 的使用方式。


    下面,说一下,目前使用很广泛的 git 如何实现这一需求(以 CentOS 7 为例进行说明)。

    确认一下 git 的版本

    > git --version
    git version 1.8.3.1

    创建仓库地址(假设全路径为 /tmp/git_repo)

    > mkdir /tmp/git_repo

    初始化仓库

    > cd /tmp/git_repo
    > git init --bare
    初始化空的 Git 版本库于 /tmp/git_repo

    在想要导出仓库内容的地方,新建一个文件夹(假设全路径为 /tmp/123)

    > mkdir /tmp/123

    导出仓库

    > cd /tmp/123
    > git clone /tmp/git_repo/ ./
    正克隆到 'git_repo'...
    warning: 您似乎克隆了一个空版本库。
    完成。

    现在就可以往 git 仓库里 新建&修改&删除 文件了。下面以 新建文件进行说明。

    > touch readme.md
    
    > git status
    # 位于分支 master
    #
    # 初始提交
    #
    # 未跟踪的文件:
    #   (使用 "git add <file>..." 以包含要提交的内容)
    #
    #   readme.md
    提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
    > git add .
    
    > git commit -m "add readme.md"
    [master(根提交) ad3a9d5] add readme.md
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 readme.md
    
    > git push origin master 
    Counting objects: 3, done.
    Writing objects: 100% (3/3), 210 bytes | 0 bytes/s, done.
    Total 3 (delta 0), reused 0 (delta 0)
    To /tmp/git_repo/
     * [new branch]      master -> master

    这个时候,我们切回到 /tmp/git_repo 看下 log
    PS: 其实在 /tmp/123 中看 log 也是一样的

    > cd /tmp/git_repo
    > git log
    commit ad3a9d5d77682dbfb846c605d609c9b5b07b9ab8
    Author: xxxxxxx <yyyyyyyy@123.com>
    Date:   Tue Feb 14 17:08:48 2017 +0800
    
        add readme.md

    以上就是使用 git 来实现这一需求的过程。

    最后,说一下,在使用 git 来实现的时候,有一个关键点,需要注意一下。那就是,当我在在初始 git仓库 时,使用的命令:

    git init --bare

    当中的 –bare 这个参数千万不能少。否则,当你在 123 中往 git_repo中提交的时候,你会得到以下的错误提示:

    > git push origin master 
    Counting objects: 29, done.
    Delta compression using up to 2 threads.
    Compressing objects: 100% (15/15), done.
    Writing objects: 100% (28/28), 4.63 KiB | 0 bytes/s, done.
    Total 28 (delta 3), reused 0 (delta 0)
    remote: error: refusing to update checked out branch: refs/heads/master
    remote: error: By default, updating the current branch in a non-bare repository
    remote: error: is denied, because it will make the index and work tree inconsistent
    remote: error: with what you pushed, and will require 'git reset --hard' to match
    remote: error: the work tree to HEAD.
    remote: error: 
    remote: error: You can set 'receive.denyCurrentBranch' configuration variable to
    remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into
    remote: error: its current branch; however, this is not recommended unless you
    remote: error: arranged to update its work tree to match what you pushed in some
    remote: error: other way.
    remote: error: 
    remote: error: To squelch this message and still keep the default behaviour, set
    remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
    To /tmp/git_repo/
     ! [remote rejected] master -> master (branch is currently checked out)
    error: 无法推送一些引用到 '/tmp/git_repo/'
    展开全文
  • 安装软件仓库的程序完整步骤小白学linux必备安装软件仓库的程序完整步骤小白学linux必备
  • 常用yum仓库

    2019-01-02 14:18:14
    yum仓库的一些常用的配置,其中包含docker-ce,还有一些其他的
  • 原标题:配件仓库存管理技巧 配件仓的管理一直以来仓储行业领域中难度最高的一类,从配件货量、超多的SKU号、以及复杂的生产批号管理等方式,都是造成配件仓管理难度过高的重要因素。尤其是库存量货更是配件仓的...
  • 数据仓库 第四版

    2014-05-21 16:22:49
    主要内容包括:决策支持系统的发展、数据仓库环境结构、数据仓库设计、数据仓库粒度划分、数据仓库技术、分布式数据仓库、EIS系统和数据仓库的关系、外部和非结构化数据与数据仓库的关系、数据装裁问题、数据仓库与...
  • 发布构建到maven中央仓库的方法和详细步骤sonatype介绍 向sonatype提交申请 配置maven GPG签名 发布版本 通知sonatype sonatype介绍Maven项目托管在Apache上的,但是中央仓库不是Apache的资源,中央仓库是由...
  • docker仓库简介 docker私有仓库创建 docker仓库配置文件
  • 数据仓库建模方法

    2012-08-03 14:01:52
    数据仓库建模方法,DEMO演示,数据仓库仓库必备
  • Maven仓库简介

    2021-09-06 18:07:00
    Maven 仓库是项目中依赖的第三方,这个所在的位置叫做仓库。 有哪些仓库 Maven 仓库有三种类型: 本地仓库 local Maven 的本地仓库,在安装 Maven 后并不会创建,它是在第一次执行 maven 命令的时候才被创建。...
  • 03 Maven仓库

    2021-03-09 16:31:42
    Maven仓库是项目依赖的第三方,这个所在的位置叫做仓库仓库分为三种类型: 本地 中央 远程 一、本地仓库 Maven的本地仓库,在安装Maven后并不会自己创建,它是在第一次执行maven命令的时候才被创建。运行...
  • 数据仓库生命周期工具箱是一本非常好的关于数据仓库的书,这是做数据库仓库必备书之一。
  • 摘要:众所周知,数据量大了之后,性能是大家关注的一点,所以我们在业务开发的时候,特别关注性能,做为一个架构师,必须对性能要了解,要懂。才能设计出高性能的业务系统。 一、GaussDB分布式架构 ...
  • 仓库库存周转率公式计算实例

    万次阅读 2016-07-12 12:49:45
    库存周转率公式实例提要 :   库存周转率=(该期间的出库总金额/该期间的平均库存金额)×100%=该期间出库总金额×2/(期初库存金额+期末库存金额 ... 3、成品库存周转率=月销售物料成本/成品在平均库存
  • 到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了。 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Git有什么特别...
  • 货充足 一个用Kotlin编写的简单仓库库存管理器。
  • [数据仓库]数据仓库初探

    千次阅读 2004-07-25 21:43:00
    数据仓库的概念数据仓库是一个面向主题的、集成的、相对稳定的、反映历史变化的数据集合,用于支持管理决策。1.面向主题:不同于操作型数据库,主题是个抽象概念,是指用户使用数据仓库进行决策时所关心的重点方面。...
  • 问题导读:1、数据仓库的总体架构是怎样的? 2、如何进行数据采集? 3、数据是如何进行加工和处理的?1.1 数据仓库总体架构专家系统接收增购项目车辆TCMS或其他子系统通过车地通信传输的实时或离线数据,经过一系列...
  • Maven仓库和插件

    千次阅读 2018-05-30 11:38:18
    Maven仓库的概念 在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构件。 Maven在某个统一的位置存储所有项目共享的构建,这个位置就称之为仓库。 任何构件都有唯一的坐标,Maven根据这个坐标定义...
  • 远程仓库

    2014-09-16 20:28:46
    到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了。 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Git有什么特别...
  • 数据仓库,生命周期工具箱英文版.学习数据仓库的必备书籍
  • 到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了。 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Git有什么...
  • 创建GIT远程仓库

    2016-11-17 19:19:29
    想玩远程仓库你肯定会想,至少需要两台机器才能玩远程是不是,但是我只有一台电脑,怎么玩?  其实一台电脑上也是可以克隆多个版本的,只要不在同一个目录下。不过不会有人这么傻的在一台电脑上搞几个远程玩...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,632
精华内容 13,452
关键字:

仓库备库