精华内容
下载资源
问答
  • 数据字典是什么

    万次阅读 多人点赞 2018-12-20 17:59:05
    可以认为,不论什么程序,都是为了处理一定的主体,这里的主体可能是人员、商品(超子)、网页、接口、数据库表、甚至需求分析等等。当主体有很多的属性,每种属性有很多的取值,而且属性的数量和属性取值的数量是...

    数据字典

    数据字典是一种通用的程序设计方法。可以认为,不论什么程序,都是为了处理一定的主体,这里的主体可能是人员、商品(超子)、网页、接口、数据库表、甚至需求分析等等。当主体有很多的属性,每种属性有很多的取值,而且属性的数量和属性取值的数量是不断变化的,特别是当这些数量的变化很快时,就应该考虑引入数据字典的设计方法。

    数据字典有两种形式

    一、把主体的属性代码化放入独立的表中,不是和主体放在一起,主体中只保留属性的代码。这里属性的数量是不变的,而属性取值的数量可以是变化的。

    二、用一个表来放结构相同的所有属性信息,不同属性的不同取值统一编码,用“类型”来区别不同的属性,主体中保留属性代码的列表。这样主体所拥有的属性数量就是可变的了。

    第二种数据字典比第一种更抽象,层级更高,也更具一般性、通用性。

    这两种形式的归纳有些抽象,为说明这两种数据字典和它们的各种优点,下面举个简单的例子来说明:

    现在有个需求,要在程序中处理“职员”信息。这里的主体就是“职员”,开始时“职员”有“国籍”、“证件”和“学历”等属性。

    比如,对于一个“职员信息”页面上的“国籍”下拉列表,我们可以就用第一种的数据字典来存储不同的国家。如果不采取这样的方法,就需要手动的把所有可能的国家名称敲到页面上。这首先有个效率的问题,每个需要用到国籍的地方都要敲一次,要敲多久?还有,如果有一天,像南斯拉夫,突然国家换名了,是不是要所有涉及的页面都要手动地改变呢?

    又比如,如果有一天一个代码的名称需要换一个,是不是要到数据库中把已经经存在的所有数据都更新一遍呢?如“证件”,现在叫“身份证”,有一天想改为叫“居民身份证”。原来如果没有用数据字典,就意味着,要把“身份证”这几个字存到《职员表》等信息表中:

    《职员表》

    姓名  证件  性别

    张三  身份证 男

    李四        身份证   女

    ....

    这样,改名后就要手动改数据库。但如果使用了数据字典,《职员表》里面存的就是:

    《职员表》

    姓名  证件  性别

    张三  001           男

    李四       001           女

    ....

    另外增加了《证件表》:

    《证件表》

    证件id  证件名

    001      身份证

    002      暂住证

    ...

    《证件表》就是第一种数据字典。要改变证件名称时,只要把其中的“身份证”改成“居民身份证”就好了,只需修改一次。而且,《职员表》不用做任何修改,页面上如果用到“证件”,也不用做修改。

    还有在程序中有时需要判断业务逻辑时,用:“select *  from 职员表 where证件= ***”,原来***是“身份证”,使用数据字典后,就是001。证件改名后,就不用手动到程序里去改,程序也就不用重新测试、发布等等。

    但第一种数据字典也有局限性。

    使用第一种数据字典后,程序中除“职员”类外,还就需要有一个“国籍”类、一个“证件”类和一个“学历”类,对应的数据库中也需要增加一张“国籍”表、一张“证件”表和一张“学历”表。“职员”类则需要包含一个对“国籍”类的引用、一个对“证件”类的引用和一个对“学历”类的引用,对应的数据库中“职员”表中也需要三个外键分别指向“国籍”表、“证件”表和“学历”表。这样的设计在类似“国籍”和“学历”这样的属性比较少时是可行的,但是随着系统复杂性的增加,系统中会出现大量结构类似的信息表和信息类,数量一直会增加到一个不可接受的地步。这里的“职员”,已经有了国籍、证件和学历三个属性,但如果职员还要增加“职位”属性,那么必然要多出个“职位表”,如果还有其它...那即,当取得一条主体的完全数据时,那将进行几十个表的联接(join)操作。

    如何解决呢?

    通过分析上述问题,可以发现的一个特征是:这些信息类的内容都是需要动态维护的,但是所需的属性是一样的,对应的数据库表中包含的字段也是一样的。关键的字段就是两个:“标识”和“名称”。“标识”用于表示不变的主键,“名称”用于表示程序界面上显示的文字。

    第二种数据字典就是为了解决上述问题而设计的。

    还是以上面的例子为例。在系统中去掉《国籍表》、《证件表》、《学历表》….,引入《系统代码分类表》和《系统代码表》:

    《系统代码分类表》

    分类标识           分类名称

    Country              国籍

    ID                       证件

    《系统代码表》

    标识                   分类                  内容

    001                    Contry              中国

    002                    Contry              美国

    …..

    501                    ID                    身份证

    502                    ID                    暂住证

    ……

    《系统代码表》的“分类”字段都指向《系统代码分类表》中的“分类标识”。这样,在程序需要获得国籍信息时,只要通过“Country”这个标识去《系统代码表》中检索就可以了。这样的设计也便于建立一个单独的程序模块来维护所有的这些公共信息。

    对于《职员表》,使用第一种数据字典时,其表结构是:

    职员ID、姓名、国籍ID、证件ID、学历ID…….

     

    采用第二种数据字典后,其表结构是:

    职员ID、姓名

    另外增加《属性表》,该表是《职员表》和《系统代码表》的关系表,其表结构是:

    属性ID、职员ID、系统代码表_标识

    如:

    《职员表》

    职员ID            姓名

    1                     张三

    2                     李四

    …..

    《属性表》

    属性ID            职员ID                系统代码表_标识

    1                         1                         001  (表示张三是中国籍)

    2                         1                         501  (表示张三的证件是身份证)

    3                         2                         002  (表示李四是美国籍)

    4                         2                         501  (表示李四的证件是身份证)

    …..

    可以看出《职员表》的设计大为简化,系统也更加灵活了,完全可以适应主体属性的大量变更了。程序的设计应用第二种数据字典时和数据库表的方法一样。

    数据字典的优点

    1. 在一定程度上,通过系统维护人员即可改变系统的行为(功能),不需要开发人员的介入。使得系统的变化更快,能及时响应客户和市场的需求。
    2. 提高了系统的灵活性、通用性,减少了主体和属性的耦合度
    3. 简化了主体类的业务逻辑
    4. 能减少对系统程序的改动,使数据库、程序和页面更稳定。特别是数据量大的时候,能大幅减少开发工作量
    5. 使数据库表结构和程序结构条理上更清楚,更容易理解,在可开发性、可扩展性、可维护性、系统强壮性上都有优势。

    数据字典的缺点

    1. 数据字典是通用的设计,在系统效率上会低一些。
    2. 程序算法相对复杂一些。
    3. 对于开发人员,需要具备一定抽象思维能力,所以对开发人员的要求较高。

    所以,当属性的数量不多时,用第一种数据字典即可。对于大型的,未定型的系统,可以采用第二种数据字典来设计。至于具体的系统里怎么设计,还是要在看实际情况来找寻通用性和效率二者间的平衡。无论怎么做,关系理论和范式仍是基础。

    数据字典的一般设计

    下面给出一个用数据库实现的第二种数据字典表的设计。要注意这个设计不是唯一的,完全可以用XML、字符串等形式来设计数据字典。

    数据字典表(Dictionary):

    字段名

    类型

    说明

    编号

    Char(16)

    间断增量(Not Null,PK)

    分类名称

    Varchar(64)

    用来进行过滤选取字典表相关域

    内容

    Varchar(255)

       

    父级编号

    Char(16)

    取Dictionary的编号(FK),用来进行等级设计。使之成为树型结构。

    展开全文
  • 什么要学数据结构?

    万次阅读 多人点赞 2019-11-19 09:45:23
    一、前言 在可视化化程序设计的今天,借助于...1) 能够熟练地选择和设计各种数据结构和算法 2) 至少要能够熟练地掌握一门程序设计语言 3) 熟知所涉及的相关应用领域的知识 其中,后两个条件比较容易实现,而第一个...

    一、前言

    在可视化化程序设计的今天,借助于集成开发环境可以很快地生成程序,程序设计不再是计算机专业人员的专利。很多人认为,只要掌握几种开发工具就可以成为编程高手,其实,这是一种误解。要想成为一个专业的开发人员,至少需要以下三个条件:

    1) 能够熟练地选择和设计各种数据结构和算法

    2) 至少要能够熟练地掌握一门程序设计语言

    3) 熟知所涉及的相关应用领域的知识

    其中,后两个条件比较容易实现,而第一个条件则需要花相当的时间和精力才能够达到,它是区分一个程序设计人员水平高低的一个 重要标志,数据结构 贯穿程序设计的始终 ,缺乏数据结构和算法的深厚功底,很难设计出高水平的具有专业水准的应用程序。曾经有一本经典计算机专业书籍叫做《数据结构+算法=程序》,也说明了数据结构和算法的重要性。

    在这里插入图片描述

    二、为什么要学数据结构

    • 数据结构是所有计算机专业的同学必学的一门课程
    • 数据结构研究的是数据如何再计算机中进行组织和存储,使得我们可以高效的获取数据或者修改数据

    计算机专业的学生都开设过数据结构课程,它是计算机学科知识结构的核心和技术体系的基石。数据结构作为计算机专业的专业基础课程,是计算机 考研必考 科目之一,如果有打算报考计算机专业的研究生,这门数据结构你是必须要学好它的,同时,工作以后的同学,会有想去报考计算机 软考 、计算机 等级考试 的,数据结构也是必考的内容之一,科学技术在飞速发展,但是作为基石的科学技术没有动摇,由于近年来算法工程师的高薪火爆,使得数据结构的重视程序空前高涨,总而言之,既然我们已经与计算机接轨就必须 掌握 好它。

    三、数据结构无处不在

    不管你是IT开发,还是其他岗位的工作人员,或者是游戏爱好者,只要你用过电脑,那么你就接触过数据结构,下面我们就来讲一讲,数据结构究竟是如何 无处不在 的。

    3.1 数据库

    不管你是从事IT工作的,还是准备从事IT开发的,数据库一定是了解的,我们知道,数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为 O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如 二分查找(binary search)、二叉树查找(binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,但是数据本身的组织结构不可能完全满足各种数据结构,所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是 索引 ,索引是一种帮助MySQL高效获取数据的 排好序数据结构,其中MySQL使用的数据结构为 B+Tree
    在这里插入图片描述

    3.2 操作系统

    相信现在的我们常用的操作系统大家一定都知道吧,例如:比尔盖茨大叔成立的微软的 Windows操作系统,大神乔布斯苹果的 Mac OS,Java开发常用的 Linux系统,由林纳斯·本纳第克特·托瓦兹开发(百度来的),还有redhat、Solaris、SunCobalt等等,都有使用到数据结构中的,系统栈以及优先队列:堆
    在这里插入图片描述

    3.3 文件压缩

    比如:RAR压缩软件、PNG图片、MAP3文件等等,都会使用数据结构,对数据进行压缩(很怕打成了亚索,心虚),而使用压缩的算法是一种树结构叫 哈夫曼树

    在这里插入图片描述

    3.4 游戏

    1) 数组:需处理的元素个数确定并且需使用下标时可以考虑,不过建议用泛型List
    优点:数组在内存中是连续存储的,索引和修改的速度都非常快
    缺点:插入和删除很慢,长度开辟过长易造成内存浪费,长度开辟过短易造成内存越界

    2) List: List是泛型的,即List,需处理的元素个数可以不确定,不存在装箱与拆箱,建议多用;而ArrayList:ArrayList list1 = new ArrayList(); ArrayList的元素属于 object 类型存在装箱与拆箱,很损耗性能。,List的底层数据结构就是数组。

    List<string> list = new List<string>();
    //新增数据   
    list.Add(“abc”);   
    //修改数据   
    list[0] = “def”;   
    //移除数据   
    list.RemoveAt(0);  
    //错误操作,因为数据的类型不是string
    list.add(123);
    

    3) 链表:常用来维护、管理那些需要频繁产生、消除的游戏对象,比如:消除类游戏中需要消除的对象。

    4) HashMap:底层是哈希表,是键值对容器,用于处理key/value键值对;底层使用的是数组+链表的结构:Map<String,String> map = new HashMap<>();

    5) 树: 1.场景管理中的四叉树;2.游戏UI里的菜单一般是分级的,一个主页面可以衍生出很多的子页面的时候,使用树来管理这些菜单是很合适的做法。

    6) 图: A*寻路算法、DFS、BFS

    游戏也是采用了大量的算法,都需要以数据结构为基石,就最简单的功能寻路,鼠标从A点到B点,这个角色就需要寻找一条从A点到B点的路,这条路还需要绕过所有的障碍物,甚至还需要找出最短的路径,这就是最经典的 图论算法,在图论算法种就使用了大量的数据结构。

    在这里插入图片描述

    四、数据结构类型

    在这里插入图片描述

    在计算机领域有一句名言 数据结构+算法=程序,而数据结构本身就是算法的基石,在近乎任何一本算法教材,都花了大量的时间讲解数据结构,学好数据结构和算法可以让我们在计算机这条道路上走的更远。如果数据结构是因为它无处不在,学好数据结构是使我们快速成长的垫脚石。

    在接下面的几篇文章中,我会为大家更新数据结构中:数组、栈、队列、链表、二分搜索树、堆、线段树、Trie、并查集、红黑树以及哈希表等等...的详细讲解,感兴趣的同学记得关注我,我是牧小农,我喂自己带盐。

    展开全文
  • 什么数据分层,数据分层的作用!

    万次阅读 2018-08-25 11:04:36
    大数据环境下该如何优雅地设计数据分层 ...而且不管是传统行业还是现在的互联网公司,都需要对数据仓库有一定的重视,而不是谈一句自己是搞大数据的就很厉害了。数据仓库更多代表的是一种对数据的管理和使...

     

    大数据环境下该如何优雅地设计数据分层

    0x00 前言

    最近出现了好几次同样的对话场景:
    问:你是做什么的?
    答:最近在搞数据仓库。
    问:哦,你是传统行业的吧,我是搞大数据的。
    答:......

    发个牢骚,搞大数据的也得建设数据仓库吧。而且不管是传统行业还是现在的互联网公司,都需要对数据仓库有一定的重视,而不是谈一句自己是搞大数据的就很厉害了。数据仓库更多代表的是一种对数据的管理和使用的方式,它是一整套包括了etl、调度、建模在内的完整的理论体系。现在所谓的大数据更多的是一种数据量级的增大和工具的上的更新。 两者并无冲突,相反,而是一种更好的结合。

    话说,单纯用用Hadoop、Spark、Flume处理处理数据,其实只是学会几种新的工具,这是搞工具的,只是在数据仓库中etl中的一部分。

    当然,技术的更新往往能领到一个时代的变革,比如Hadoop的诞生,光是深入研究一个大数据组件就要花很大的时间和精力。但是在热潮冷却之后,我们更应该考虑地是如何更好地管理和使用自己的数据。

    对于数据的从业者来讲,要始终重视紧跟技术的变革,但是切记数据为王,在追求技术的极致的时候,不要忘了我们是搞数据的。

    文章主题

    吐槽完毕,本文主要讲解数据仓库的一个重要环节:如何设计数据分层!,其它关于数据仓库的内容可参考其它的文章数据仓库

    本文对数据分层的讨论适合下面一些场景,超过该范围场景 or 数据仓库经验丰富的大神就不必浪费时间看了。

    • 数据建设刚起步,大部分的数据经过粗暴的数据接入后就直接对接业务。
    • 数据建设发展到一定阶段,发现数据的使用杂乱无章,各种业务都是从原始数据直接计算而得。
    • 各种重复计算,严重浪费了计算资源,需要优化性能。

    文章结构

    最初在做数据仓库的时候遇到了很多坑,由于自身资源有限,接触数据仓库的时候,感觉在互联网行业里面的数据仓库成功经验很少,网上很难找到比较实践性强的资料。而那几本经典书籍里面又过于理论,折腾起来真是生不如死。还好现在过去了那个坎,因此多花一些时间整理自己的思路,帮助其他的小伙伴少踩一些坑。

    1. 为什么要分层?这个问题被好几个同学质疑过。因此分层的价值还是要说清楚的。
    2. 分享一下经典的数据分层模型,以及每一层的数据的作用和如何加工得来。
    3. 分享两个数据分层的设计,通过这两个实际的例子来说明每一层该怎么存数据。
    4. 给出一些建议,不是最好的,但是可以做参考。

    0x01 为什么要分层

    我们对数据进行分层的一个主要原因就是希望在管理数据的时候,能对数据有一个更加清晰的掌控,详细来讲,主要有下面几个原因:

    1. 清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。
    2. 数据血缘追踪:简单来讲可以这样理解,我们最终给业务诚信的是一能直接使用的张业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。
    3. 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
    4. 把复杂问题简单化。讲一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
    5. 屏蔽原始数据的异常。
    6. 屏蔽业务的影响,不必改一次业务就需要重新接入数据。

    数据体系中的各个表的依赖就像是电线的流向一样,我们都希望它是很规整,便于管理的。但是,最终的结果大多是第一幅图,而非第二幅图。

    0x02 怎样分层

    理论

    我们从理论上来做一个抽象,可以把数据仓库分为下面三个层,即:数据运营层、数据仓库层和数据产品层。

    1. ODS全称是Operational Data Store,操作数据存储

    “面向主题的”,数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。

    例如这一层可能包含的数据表为:人口表(包含每个人的身份证号、姓名、住址等)、机场登机记录(包含乘机人身份证号、航班号、乘机日期、起飞城市等)、银联的刷卡信息表(包含银行卡号、刷卡地点、刷卡时间、刷卡金额等)、银行账户表(包含银行卡号、持卡人身份证号等)等等一系列原始的业务数据。这里我们可以看到,这一层面的数据还具有鲜明的业务数据库的特征,甚至还具有一定的关系数据库中的数据范式的组织形式。

    但是,这一层面的数据却不等同于原始数据。在源数据装入这一层时,要进行诸如去噪(例如去掉明显偏离正常水平的银行刷卡信息)、去重(例如银行账户信息、公安局人口信息中均含有人的姓名,但是只保留一份即可)、提脏(例如有的人的银行卡被盗刷,在十分钟内同时有两笔分别在中国和日本的刷卡信息,这便是脏数据)、业务提取、单位统一、砍字段(例如用于支撑前端系统工作,但是在数据挖掘中不需要的字段)、业务判别等多项工作。

    2. 数据仓库层(DW),是数据仓库的主体

    在这里,从ODS层中获得的数据按照主题建立各种数据模型。例如以研究人的旅游消费为主题的数据集中,便可以结合航空公司的登机出行信息,以及银联系统的刷卡记录,进行结合分析,产生数据集。在这里,我们需要了解四个概念:维(dimension)、事实(Fact)、指标(Index)和粒度( Granularity)。

    3. 数据产品层(APP),这一层是提供为数据产品使用的结果数据

    在这里,主要是提供给数据产品和数据分析使用的数据,一般会存放在es、mysql等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用。
    比如我们经常说的报表数据,或者说那种大宽表,一般就放在这里。

    技术实践

    这三层技术划分,相对来说比较粗粒度,后面我们会专门细分一下。在此之前,先聊一下每一层的数据一般都是怎么流向的。这里仅仅简单介绍几个常用的工具,侧重中开源界主流。

    1. 数据来源层--> ODS层

    这里其实就是我们现在大数据技术发挥作用的一个主要战场。 我们的数据主要会有两个大的来源:

    1. 业务库,这里经常会使用sqoop来抽取,比如我们每天定时抽取一次。在实时方面,可以考虑用canal监听mysql的binlog,实时接入即可。
    2. 埋点日志,线上系统会打入各种日志,这些日志一般以文件的形式保存,我们可以选择用flume定时抽取,也可以用用spark streaming或者storm来实时接入,当然,kafka也会是一个关键的角色。
    3. 其它数据源会比较多样性,这和具体的业务相关,不再赘述。

    注意: 在这层,理应不是简单的数据接入,而是要考虑一定的数据清洗,比如异常字段的处理、字段命名规范化、时间字段的统一等,一般这些很容易会被忽略,但是却至关重要。特别是后期我们做各种特征自动生成的时候,会十分有用。后续会有文章来分享。

    2. ODS、DW --> App层

    这里面也主要分两种类型:

    1. 每日定时任务型:比如我们典型的日计算任务,每天凌晨算前一天的数据,早上起来看报表。 这种任务经常使用Hive、Spark或者生撸MR程序来计算,最终结果写入Hive、Hbase、Mysql、Es或者Redis中。
    2. 实时数据:这部分主要是各种实时的系统使用,比如我们的实时推荐、实时用户画像,一般我们会用Spark Streaming、Storm或者Flink来计算,最后会落入Es、Hbase或者Redis中。

    0x03 举个例子

    网上的例子很多,就不列了,只举个笔者早期参与设计的数据分层例子。分析一下当初的想法,以及这种设计的缺陷。上原图。

    此处@Ruby大神。现实是我只是个打酱油的。盗图、盗思想。

    当初的设计总共分了6层,其中去掉元数据后,还有5层。下面分析一下当初的一个设计思路。

    ** 缓冲层(buffer) **

    • 概念:又称为接口层(stage),用于存储每天的增量数据和变更数据,如Canal接收的业务变更日志。
    • 数据生成方式:直接从kafka接收源数据,需要业务表每天生成update,delete,inseret数据,只生成insert数据的业务表,数据直接入明细层
    • 讨论方案:只把canal日志直接入缓冲层,如果其它有拉链数据的业务,也入缓冲层。
    • 日志存储方式:使用impala外表,parquet文件格式,方便需要MR处理的数据读取。
    • 日志删除方式:长久存储,可只存储最近几天的数据。讨论方案:直接长久存储
    • 表schema:一般按天创建分区
    • 库与表命名。库名:buffer,表名:初步考虑格式为:buffer_日期_业务表名,待定。

    明细层(ODS, Operational Data Store,DWD: data warehouse detail)

    • 概念:是数据仓库的细节数据层,是对STAGE层数据进行沉淀,减少了抽取的复杂性,同时ODS/DWD的信息模型组织主要遵循企业业务事务处理的形式,将各个专业数据进行集中,明细层跟stage层的粒度一致,属于分析的公共资源
    • 数据生成方式:部分数据直接来自kafka,部分数据为接口层数据与历史数据合成。
      canal日志合成数据的方式待研究。
    • 讨论方案:canal数据的合成方式为:每天把明细层的前天全量数据和昨天新数据合成一个新的数据表,覆盖旧表。同时使用历史镜像,按周/按月/按年 存储一个历史镜像到新表。
    • 日志存储方式:直接数据使用impala外表,parquet文件格式,canal合成数据为二次生成数据,建议使用内表,下面几层都是从impala生成的数据,建议都用内表+静态/动态分区。
    • 日志删除方式:长久存储。
    • 表schema:一般按天创建分区,没有时间概念的按具体业务选择分区字段。
    • 库与表命名。库名:ods,表名:初步考虑格式为ods_日期_业务表名,待定。
    • 旧数据更新方式:直接覆盖

    轻度汇总层(MID或DWB, data warehouse basis)

    • 概念:轻度汇总层数据仓库中DWD层和DM层之间的一个过渡层次,是对DWD层的生产数据进行轻度综合和汇总统计(可以把复杂的清洗,处理包含,如根据PV日志生成的会话数据)。轻度综合层与DWD的主要区别在于二者的应用领域不同,DWD的数据来源于生产型系统,并未满意一些不可预见的需求而进行沉淀;轻度综合层则面向分析型应用进行细粒度的统计和沉淀
    • 数据生成方式:由明细层按照一定的业务需求生成轻度汇总表。明细层需要复杂清洗的数据和需要MR处理的数据也经过处理后接入到轻度汇总层。
    • 日志存储方式:内表,parquet文件格式。
    • 日志删除方式:长久存储。
    • 表schema:一般按天创建分区,没有时间概念的按具体业务选择分区字段。
    • 库与表命名。库名:dwb,表名:初步考虑格式为:dwb_日期_业务表名,待定。
    • 旧数据更新方式:直接覆盖

    主题层(DM,date market或DWS, data warehouse service)

    • 概念:又称数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
    • 数据生成方式:由轻度汇总层和明细层数据计算生成。
    • 日志存储方式:使用impala内表,parquet文件格式。
    • 日志删除方式:长久存储。
    • 表schema:一般按天创建分区,没有时间概念的按具体业务选择分区字段。
    • 库与表命名。库名:dm,表名:初步考虑格式为:dm_日期_业务表名,待定。
    • 旧数据更新方式:直接覆盖

    应用层(App)

    • 概念:应用层是根据业务需要,由前面三层数据统计而出的结果,可以直接提供查询展现,或导入至Mysql中使用。
    • 数据生成方式:由明细层、轻度汇总层,数据集市层生成,一般要求数据主要来源于集市层。
    • 日志存储方式:使用impala内表,parquet文件格式。
    • 日志删除方式:长久存储。
    • 表schema:一般按天创建分区,没有时间概念的按具体业务选择分区字段。
    • 库与表命名。库名:暂定apl,另外根据业务不同,不限定一定要一个库。
    • 旧数据更新方式:直接覆盖

    0x04 如何更优雅一些

    前面提到的一种设计其实相对来讲已经很详细了,但是可能层次会有一点点多,而且在区分一张表到底该存放在什么位置的时候可能还有一点点疑惑。 我们在这一章里再设计一套数据仓库的分层,同时在前面的基础上加上维表和一些临时表的考虑,来让我们的方案更优雅一些。

    下图,做了一些小的改动,我们去掉了上一节的Buffer层,把数据集市层和轻度汇总层放在同一个层级上,同时独立出来了维表和临时表。

    这里解释一下DWS、DWD、DIM和TMP的作用。

    • DWS:轻度汇总层,从ODS层中对用户的行为做一个初步的汇总,抽象出来一些通用的维度:时间、ip、id,并根据这些维度做一些统计值,比如用户每个时间段在不同登录ip购买的商品数等。这里做一层轻度的汇总会让计算更加的高效,在此基础上如果计算仅7天、30天、90天的行为的话会快很多。我们希望80%的业务都能通过我们的DWS层计算,而不是ODS。
    • DWD:这一层主要解决一些数据质量问题和数据的完整度问题。比如用户的资料信息来自于很多不同表,而且经常出现延迟丢数据等问题,为了方便各个使用方更好的使用数据,我们可以在这一层做一个屏蔽。
    • DIM:这一层比较单纯,举个例子就明白,比如国家代码和国家名、地理位置、中文名、国旗图片等信息就存在DIM层中。
    • TMP:每一层的计算都会有很多临时表,专设一个DWTMP层来存储我们数据仓库的临时表。

    0x05 问答

    有读者问了一些问题,是我之前有一些没讲清楚,补到这里。

    问:dws和dwd是并行而不是先后顺序?
    答:并行的,dw层
    问:那其实对于同一个数据,这两个过程是串行的?
    答:dws 会做汇总,dwd和ods的粒度相同,这两层之间也没有依赖的关系
    问:对呀,那这样dws里面的汇总没有经过数据质量和完整度的处理,或者单独做了这种质量相关的处理,为什么不在dwd之上再做汇总呢?我的疑问其实就是,dws的轻度汇总数据结果,有没有做数据质量的处理?

    答:ods 之间到dws就好 没必要过dwd,我举个例子,你的浏览商品行为,我做一层轻度汇总,就直接放在dws了。但是你的资料表,要从好多表凑成一份,我们从四五分个人资料表中 凑出来了一份完整的资料表放在了dwd中。然后在app层,我们要出一张画像表,包含用户资料和用户近一年的行为,我们就直接从dwd中拿资料, 然后再在dws的基础上做一层统计,就成一个app表了。

    问:嗯,最后一个疑问,在现实生产中,可不可能存在计算dws时,会用到dwd表的情况?

    答:不 这样依赖就混了,dws不会依赖dwd,dws直接轻度汇总,业务用的话都说app。

    问:就是说,dwd针对的是对象,它的数据质量处理有点像对用户等等的实体信息的纠错和汇总;dws针对的是行为,可以在某些维度上上卷的行为~

    答:你这样理解吧 dws存事实表,dwd 维度表。

    0xFF 总结

    数据分层是数据仓库非常重要的一个环节,它决定的不仅仅是一个层次的问题,还直接影响到后续的血缘分析、特征自动生成、元数据管理等一系列的建设。因此适于尽早考虑。

    另外,每一层的名字不必太过在意,自己按照喜好就好。

    本文分享了笔者自己对数据仓库的一些理解和想法,不一定十分准确,有什么问题可以多交流。

    初步估计在数据仓库方面,应该还会有三个主题分享:血缘分析、特征自动生成、元数据管理。分享完成之后,数据仓库相关的就告一段落了。

    参考

     

    展开全文
  • 到底什么数据中台?

    万次阅读 多人点赞 2019-07-22 21:00:00
    最近可能大家听到“数据中台”这个词越来越频繁了,有时候我跟一些朋友聊起来,也是都在说这个,但是一直不知道这到底是个什么。最近就看到这篇文章,觉得说的还挺好的,分享给大家看...
        

    最近可能大家听到“数据中台”这个词越来越频繁了,有时候我跟一些朋友聊起来,也是都在说这个,但是一直不知道这到底是个什么。最近就看到这篇文章,觉得说的还挺好的,分享给大家看看,希望大家看完能对数据中台有一些认识。


    转载来源

    公众号:AI 前线

    声明:本文由微信公众号 「AI 前线」原创(ID:ai-front),未经授权不得转载

    阅读本文大概需要 12 分钟。


    导读:数据中台被誉为大数据的下一站,由阿里兴起,核心思想是数据共享,并在 2018 年因为“腾讯数据中台论”再度成为了人们谈论的焦点。在 3 月 15 日 ThoughtWorks 技术雷达峰会上,关于数据中台的话题也获得了众多参会者的热烈关注。如今似乎人人都在提数据中台,但却不是所有人都清楚数据中台到底意味着什么。数据中台是只有大厂才需要考虑的高大上的概念吗?普通企业该不该做数据中台?数据中台的出现会给现有数据从业者们带来颠覆式的挑战吗?带着上述问题,InfoQ 在技术雷达峰会上采访了 ThoughtWorks 数据和智能总监史凯,谈谈他对于数据中台的看法。
    数据中台不是大数据平台!

    首先它不是一个平台,也不是一个系统,如果有厂商说他们有个数据中台卖给你,对不起,它是个骗子。

    要回答数据中台是什么,首先要探讨一下中台到底是什么。虽然没有明确的定义,但是作为理工直男,我们可以先把中台看作是一种中间层。既然是一种中间层,那么中台确实是一种十足技术用语,我们可以完全从技术角度来探讨了。

    我们可以应用 Gartner 的 Pace Layer 来理解为什么要有中间层,这样可以更好地理解中台的定位和价值。Pace Layer 里提到,可以按照事物变化的速度来分层,这样可以逐层分析并设计合理的边界与服务。

    640?wx_fmt=png

    在数据开发中,核心数据模型的变化是相对缓慢的,同时,对数据进行维护的工作量也非常大;但业务创新的速度、对数据提出的需求的变化,是非常快速的。

    数据中台的出现,就是为了弥补数据开发和应用开发之间,由于开发速度不匹配,出现的响应力跟不上的问题。

    数据中台解决的问题可以总结为如下三点:

    1. 效率问题:为什么应用开发增加一个报表,就要十几天时间?为什么不能实时获得用户推荐清单?当业务人员对数据产生一点疑问的时候,需要花费很长的时间,结果发现是数据源的数据变了,最终影响上线时间。

    2. 协作问题:当业务应用开发的时候,虽然和别的项目需求大致差不多,但因为是别的项目组维护的,所以数据还是要自己再开发一遍。

    3. 能力问题:数据的处理和维护是一个相对独立的技术,需要相当专业的人来完成,但是很多时候,我们有一大把的应用开发人员,而数据开发人员很少。

    这三类问题都会导致应用开发团队变慢。这就是中台的关键——让前台开发团队的开发速度不受后台数据开发的影响。

    史凯总结说,“数据中台是聚合和治理跨域数据,将数据抽象封装成服务,提供给前台以业务价值的逻辑概念”。

    如下图所示:

    640?wx_fmt=png

    DData API 是数据中台的核心,它是连接前台和后台的桥梁,通过 API 的方式提供数据服务,而不是直接把数据库给前台、让前台开发自行使用数据。至于产生 DataAPI 的过程,怎么样让 DataAPI 产生得更快,怎么样让 DATA API 更加清晰,怎么样让 DATA API 的数据质量更好,这些是要围绕数据中台去构建的能力。

    数据中台和数据仓库、数据平台的关键区别

    这是现在数据行业大家经常讨论的问题,到底数据仓库、数据平台和数据中台的区别是什么。

    640?wx_fmt=png

    概括地说,三者的关键区别有以下几方面:

    1. 数据中台是企业级的逻辑概念,体现企业 D2V(Data to Value)的能力,为业务提供服务的主要方式是数据 API;

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

    3. 数据平台是在大数据基础上出现的融合了结构化和非结构化数据的数据基础平台,为业务提供服务的方式主要是直接提供数据集;

    4. 数据中台距离业务更近,为业务提供速度更快的服务;

    5. 数据仓库是为了支持管理决策分析,而数据中台则是将数据服务化之后提供给业务系统,不仅限于分析型场景,也适用于交易型场景;

    6. 数据中台可以建立在数据仓库和数据平台之上,是加速企业从数据到业务价值的过程的中间层。

    数据仓库具有历史性,其中存储的数据大多是结构化数据,这些数据并非企业全量数据,而是根据需求针对性抽取的,因此数据仓库对于业务的价值是各种各样的报表,但这些报表又无法实时产生。数据仓库报表虽然能够提供部分业务价值,但不能直接影响业务。

    数据平台的出现是为了解决数据仓库不能处理非结构化数据和报表开发周期长的问题,所以先撇开业务需求、把企业所有的数据都抽取出来放到一起,成为一个大的数据集,其中有结构化数据、非结构化数据等。当业务方有需求的时候,再把他们需要的若干个小数据集单独提取出来,以数据集的形式提供给数据应用。

    而数据中台是在数据仓库和数据平台的基础上,将数据生产为为一个个数据 API 服务,以更高效的方式提供给业务。

    数据中台应该具备什么能力?

    大数据和人工智能大火之后这几年,很多人一直在提一个说法,那就是“数据是新的石油”。但史凯的观点却有些不同,在他看来,数据不等于数据资产,如果没有从业务的角度对数据进行规划,再多的数据也无法产生价值。

    史凯认为数据中台最核心的一个关键组件是数据资产目录。“我们认为,一个企业的数据要能够充分发挥价值,很重要的一个前提条件就是这个企业的数据结构和数据资产目录是对整个企业开放的。所有人都能够通过这个资产目录了解公司有哪些类别的数据、包含什么属性、源数据由谁管理,这样就可以快速搞清楚这些数据是不是自己需要的。但数据本身可以不开放,因为数据是有隐私信息和安全级别的。”

    大企业内部业务众多,不同业务可能存在很多重复数据。所谓的数据资产目录就是把数据的模型去重、归一、梳理,变成一个树状结构,这个树状结构不直接对应数据库中的字段。以航空货运为例,其数据资产可能包括货机、客运机的辅舱,一架货机就是一个数据资产目录的节点,而货机的各种属性(如货机型号、空间大小、年份等)就是这个节点下面的数据模型。数据资产目录做的事情就是从业务层面出发制定数据标准,将企业业务相关的数据资产模型抽取出来,这跟后面用什么数据库去存储、用什么结构去存储、存成结构化还是非结构化都没有关系。它相当于把企业的业务从数据层面做了一个梳理,用数据的语言把企业的业务模型还原出来。数据资产目录做好之后,后面才是用什么技术手段、从哪里提取数据来映射到这个数据资产目录。

    除了开放,数据资产目录还应该具有标签描述、可检索,这样才能最大程度地方便真正使用数据的人,以最快的速度找到他们需要的东西。

    在 ThoughtWorks 提出的精益数据创新体系中将企业所需要具备的数据能力概括为以下六种,具备了这六种能力,企业才具备成为数据驱动的智能企业的基础,而这些能力的承载平台,就是数据中台:

    640?wx_fmt=png

    1. 数据资产的规划和治理

    做中台之前,首先需要知道业务价值是什么,从业务角度去思考企业的数据资产是什么。数据资产不等同于数据,数据资产是唯一的,能为业务产生价值的数据。 对于同一堆数据,不同业务部门所关注的数据指标可能完全不同,怎么让各个跨域的业务变成统一的标准,就需要规划企业的数据全景图,将所有有可能用上的、所有对企业有可能有价值的数据都规划出来,最终梳理出企业的数据资产目录。在这个时候不需要考虑有没有系统、有没有数据,只需要关注哪些数据是对企业业务有价值的。这一层不建议做得太细,太细就难以形成标准,不能适用于多个场景了。数据治理是数据中台很重要的一个领域,ThoughtWorks 认为在现在业务边界消失、需求快速变化的情况下,企业需要具备精益数据治理的能力——Lean Data Governance。传统的中心化、事前控制式的数据治理方式,要改变为去中心化、事后服务式的治理方式。

    640?wx_fmt=png

    1. 数据资产的获取和存储

    数据中台要为企业提供强大的数据资产的获取和存储的能力。

     3. 数据的共享和协作

    企业的数据中台一定是跨域的,需要让所有的人都知道数据资产目录在哪里。不能因为数据安全,就不让大家知道企业有什么数据。没有共享和开放,数据没有办法流动起来,没有流动的话数据的价值产生的速度就会非常慢。所以在数据安全的基础上,企业的数据资产目录要对利益相关者、价值创造者开放,要让业务人员能够做到“Self-Service”。

      4. 业务价值的探索和分析

    数据中台不仅要建立到源数据的通路,还需要提供分析数据的工具和能力,帮助业务人员去探索和发现数据的业务价值。一个好的数据中台解决方案中需要针对不同业务岗位的用户提供个性化的数据探索和分析的工具,并且在此基础上一键生成数据 API,以多样化的方式提供给前台系统。

    1. 数据服务的构建和治理

    数据中台需要保证数据服务的性能和稳定性,以及数据质量和准确性,还需要具备强大的服务治理能力。数据中台是一个生态平台,在数据中台上面会不断生长各种数据服务,所以从一开始就构建好数据服务的治理结构是非常重要的,数据服务需要可以被记录、可被跟踪、可被审计、可被监控。

       6. 数据服务的度量和运营

    如果数据中台最终只是做到把数据给到业务人员,那它就只是一个搬运工的角色。数据中台还需要具备度量和运营数据服务的能力,能够对中台上提供的数据服务及相关行为持续跟踪和记录,包括哪些数据服务被哪个部门用了多少次等,通过这些去度量每一个数据服务的业务价值。

    史凯认为,数据中台是一个需要用互联网思维去经营的利润中心平台,数据中台的经营分析人员需要分析业务,了解为什么今天上午这个财务部门的人用了数据中台、调用了十次,下午他不用了,原因是什么,调用了这些数据服务的人通常还会调用哪些其他的数据服务。这些都需要相应地做记录、做日志、做分析,要把数据当做像电商平台一样去经营,然后实时地根据这些业务行为数据去提醒数据服务提供方,调整、改变、优化数据服务,这才是可经营的数据中台,也只有这样业务部门才能得到最快的支持和响应。

    为什么人人都需要数据中台?

    数据中台并非只有大公司才需要的高大上的玩意。

    ThoughtWorks 从 2017 年到现在,已经帮助多家大型国内外企业建设数据中台,其中有体量巨大的企业级数据中台,也有部门级的小数据中台。

    “未来所有的企业核心都会变成加工数据的企业,而数据中台是数据价值化的加工厂,所以所有的企业都需要数据中台的能力,数据中台一定是未来每个企业的标准配置。”

    在史凯看来,数据中台并不意味着“大而全”的数据平台。根据企业的规模和业务的不同,数据中台可大可小,规模、复杂度可能都不相同,但它对业务产生的价值是一样的。

    当企业评估自己是否应该建设数据中台时,应该从哪些方面来考虑?史凯认为,从战略角度来说,每个企业都需要建立自己的数据中台;从战术角度来说,当企业发现自己的数据开发利用的速度和应用开发的速度不匹配的时候,就需要考虑构建数据中台。

    原来很多企业在做应用系统的时候,什么都不考虑直接上单体架构,一上来就先做数据库,然后在上面建应用。ThoughtWorks 建议现在的企业,即使不做数据中台、不去立一个叫做“数据中台”的项目,但是在做应用的时候,最好把这个应用分成三层,业务层、数据中台层、源数据层,在一开始做应用的时候就把三个层次抽象出来。

    数据质量差所以做不了数据中台?No!

    历史遗留的数据质量问题经常让大家对数据的利用和价值产生质疑。2018 年,史凯在与不同企业沟通过程中经常听到的一句话就是,“我们现在还没有到利用数据这一步,因为(应用系统中的)数据质量太差”。

    每次听到这句话,史凯脑子里就好像听到了另外一句话,“还没到培养孩子的时候啊,孩子太小了”。

    不能因为数据质量差,就不去利用数据。恰恰是因为没有去做后面的事情,所以数据质量才差。而且也不能因为数据质量差就抛开业务场景、试图全面解决数据质量的问题,这样得不到业务部门的支持,也无法从数据工作中产生业务价值。所以 ThoughtWorks 建议的恰恰是利用做应用、做业务的需求,同步解决数据质量问题。

    史凯认为,数据质量问题,根本上是在构建应用之初缺乏整体数据规划和数据思维导致的问题。原来的流程类应用构建之初,只考虑了如何让流程跑起来,缺乏对这个应用在整个企业的数据全景图(Data Landscape)中的定位的分析,没有从源头上优化数据的存储、流转,从而更好地与其他的系统中的数据去对齐口径、统一语言,将流程问题抽象成领域模型问题,再将领域模型抽象成数据模型。

    建设数据中台的挑战及应对策略

    建设数据中台最大的挑战在于前期能否从业务层面梳理清楚有业务价值的场景,以及数据全景图,而不仅在于后期的技术建设。

    数据中台建设面临的挑战包括:

    • 梳理业务场景:搞清楚数据中台如何对业务产生价值。

    • 建设数据中台的优先级策略:需求可能大而全,但我们不能直接建大而全的数据中台,应该根据业务重要性来排需求的优先级。

    • 数据治理问题:和业务独立开的数据治理少有成功的,大的数据标准要有(数据资产目录),通过数据资产目录将共有的纬度、共性的业务模型提炼出来,在此基础之上数据治理需要跟业务场景紧密结合。

      数据中台的建设需要两个战略耐心

    数据中台是为了加快从数据到业务价值的产生速度,但是它的生产过程依然是需要时间、有很多复杂的工作要做的,所以对于数据中台的投资方和数据中台的建设方来讲,都需要对应的战略耐心。

    640?wx_fmt=png

    • 对于投资方来讲,要充分认识到数据中台类项目的价值和局限性。在现在的组织结构和技术成熟度下,数据中台依旧是一个技术平台,对于业务价值的产生是一个加速的过程。但是业务对于数据的需求不会因为有了数据中台就减少,数据中台也不是哆啦 A 梦,不能随心所欲地变出各种业务想要的服务。这依然是一个需要统筹规划、敏捷迭代、演进建设的系统性工程,所以需要要管理好期望,有一定的战略耐心。

    • 对于建设方来讲,要充分认识到数据中台建设的复杂度,不要操之过急,不要期待毕其功于一役。史凯的建议是要从小中台做起,围绕具体有价值的业务场景去建设,尽量不脱离场景去搞周期长、大而全的纯工具平台建设。

      数据中台也可以小而美

      建设数据中台的关键考量包括两方面。

    首先数据中台一定要与业务价值对齐。构建数据中台,最重要的不是技术,也不是数据质量好不好,而是数据思维和数据文化。数据思维就是要建立起从数据的视角去思考问题的方式;数据文化就是要把数据和业务当成一体去看,而不是只将数据当作一个支持工具。想清楚业务对于数据的诉求是构建数据中台的第一步,哪怕暂时不能想的太细,也要去想,想不清楚就先不要做。

    不要在业务场景还没有明确、优先级还不清晰、价值度量体系尚未建立起来的时候,就建立大而全的数据平台,并且把所有的数据都存起来。企业都是追求投入产出比的,大而全的数据平台往往会面临尴尬的局面,一堆功能看上去很有用,应该都能用上,但是缺乏应用场景,真的有了场景,发现也不能开箱即用,还需要众多的定制化。

    其次,数据中台应该从小数据、小场景做起。

    数据中台是面向场景而非面向技术的,这种与客户的业务、企业的结构和信息化发展阶段有着紧密的相关性的业务基础架构,是很难买一个大而全的产品来一劳永逸解决的。

    可以通过下面这个图来解释构建中台的原则:

    640?wx_fmt=png

    一开始的时候需要顶层设计,面向业务愿景制定中台的整体规划,全面的梳理数据创新全景蓝图,这就是上图左边的黑色框架部分,通过业务愿景驱动出所有的业务场景探索,从而推导出数据中台的全景架构、技术支撑。

    但是在实施的时候,要从具体的业务场景出发。从高价值数据集场景做起,然后顺着这个场景竖切,找到数据全景图中的一个或多个数据集合,从小数据场景落地,这样才能快速验证价值。大处思考,全局拉通,避免后续的数据孤岛,但是从小数据集切入,从可实现性高的场景启动。然后一个个的场景做起来,业务价值和中台能力也就同步建立起来了。

    总的来讲就是,“设计阶段横着走,落地阶段竖着切。”

    数据中台团队和技术选型

    数据中台团队通常需要包含以下角色:

    • 业务专家团队:了解业务、梳理业务场景,确定数据资产与业务场景的一一对应关系,确定业务场景的优先级,为数据中台的建设提供依据。

    • 数据工程团队:建设和维护数据中台,包括 ETL、数据采集,以及数据中台性能和稳定性保证,利用中台的工具采集、存储、加工、处理数据。

    • 数据分析团队:分析数据价值、探索场景,生产更多的数据服务。

    • 数据治理团队:梳理数据标准、构件数据安全和隐私规范,利用开源去中心化的数据治理工具(比如 atlas、wherehows)来围绕业务场景解决数据质量和安全问题。

    • 智能算法团队:为数据分析、业务探索提供智能和算法工具。

    而这样的一个团队的工作就构成了一个数据生产线,一个从数据到业务服务的数据服务工厂,这个工厂有生产车间(Data Pipeline)、研发中心(数据实验室)、管理办公室(数据治理),还有产品展示中心(数据服务商店)。

    640?wx_fmt=png

    数据工厂是一个逻辑概念,不是一个大而全的产品,ThoughtWorks 结合过去几年的实践给出了一个数据工厂组件选型的参考架构,这些推荐的架构和组件,很多都体现在过去 ThoughtWorks 推出的技术雷达中并进行了详细解释,如下:

    640?wx_fmt=png

    数据中台的出现对于现有数据团队的挑战

    前面已经提到,数据中台是企业的 Data API 工厂,用更高效、更协同的方式加快从数据到业务的价值,能够给业务提供更高的响应力。所以数据中台距离业务更近,这对于传统企业的数据业务来讲,是一个重大的变化,同时给原来的数据团队也会带来巨大的挑战。

     1. 对数据分析人员的业务要求提高了

    企业传统的数据工作和业务工作分工明确、界限清晰,业务人员负责业务需求,提出业务问题,并将业务问题拆解成一个个清晰的数据问题,然后数据工程师和数据分析师在这个清晰的问题下解题。

    但是,在数据中台出现后,数据中台是一个赋能平台,它会沉淀、提供很多数据分析工具和数据服务,能够让不具备专业数据能力的业务人员也可以进行一些简单的数据分析,产生业务的洞察。这就意味着在数据中台的支持下,相对简单清晰的业务问题会更多的由业务人员自己解决掉,那么传递到专业数据人员的问题,都会是更加复杂的问题。这对于数据人员的业务理解能力就加强了,他 / 她们必须具备快速理解业务的能力,才能够体现出专业性和优势。

     2. 对于数据人员的工程能力要求提高了

    原来的数据分析工作属于个体工作方式,每一个数据科学家、数据分析师就是一个独立的工作单元,业务部门给出业务问题,他们通过自己擅长熟悉的工具和方法给出结果。但是在数据中台出现后,他们一方面获得了更多数据分析的武器和工具,能够站在前人的基础上工作,提高了效率和准确度,另外一方面,他们也需要掌握更多的平台化的数据分析工具,比如 Jupyter Notebook,同时也被要求能够把自己分析的结果转化成数据服务,沉淀到中台。

     3. 数据团队需要具备更多的业务视角

    原来的数据分析团队是一个功能型团队,更多以数据智囊团的身份存在。大部分情况下,距离业务比较远,更不要提对业务的结果负责。而在数据中台出现后,数据中台距离业务会越来越近,甚至直接影响和参与业务的运行,数据团队将慢慢脱离数据智囊团的身份,逐渐从后台走向前台,直接负责一个个数据服务,而这些数据服务是会直接参与到业务当中、产生业务价值的。这样的定位变化,要求数据团队具备更多的业务视角,要更关注业务价值,直接对齐企业的业务目标去工作。

    所以,数据中台的出现,不仅是一个技术平台,它对于企业而言是一个系统化的工作,企业数据相关的流程、职责、分工都要有对应的调整,才能达成整体的目标。

    数据中台 VS 数据隐私

    对于数据中台来说,数据隐私和安全性也是非常重要的问题。可能很多人还记得前些日子马化腾针对“腾讯数据中台论”的回应。去年腾讯组织架构调整进程中实现了技术打通,而对数据打通保持谨慎态度。马化腾在 18 年 11 月的世界互联网大会上回应“数据中台论”:“腾讯不能套用很多其他公司的做法,把数据直接去任意打通。因为在我们的平台里面,大量全部都是人和人之间的通信、社交行为数据,如果说数据可以任意打通,给公司业务部门或者给外部的客户用,那是会带来灾难性的后果。这方面我们要更加谨慎,我们要从用户的角度来考虑,把个人信息和数据保护放在优先地位。”很多人将这解读为腾讯不做数据中台,史凯却不这么认为。

    在他看来,腾讯的回应并不是说他们不做数据中台,而是强调要在数据隐私上做更多的工作。其实所有的数据安全和隐私的保护都需要从场景出发。史凯认为,“不能从纯数据层面来看数据隐私,数据隐私是不能脱离场景的”。如果纯粹从数据层面,而不从业务场景层面去管理数据隐私,就会带来两方面的问题,要么数据被管理的非常死,阻碍了业务价值的产生;要么数据隐私管理就会有漏洞。

    史凯举了一个例子,比如我们讲的用户交易数据,如果不关联用户基本信息,交易数据本身对于用户来说是不具备隐私风险的,因为它不关联到任何一个用户个体。所以,是可以对脱敏后的用户交易数据进行分析和利用的。

    另一方面,如果脱离场景谈数据隐私,也可能会导致忽略了潜在的安全问题。有时候如果不把场景关联起来,可能两个数据看上去没有安全问题,但其实外人把这两个数据关联起来就产生价值了。这也是为什么在一开始的时候就要把所有的场景,尽可能地全部分析出来。

    另外,设置权限、数据分级审核、库级数据脱敏等都是可以提升数据安全的手段。现代数据中台必须具备数据调用行为的监控和记录机制,反过来也能增强对数据安全和隐私的保护。

    数据中台的下一步

    当前国内外已经有不少公司开始投资建设数据中台,大家比较熟悉的包括阿里、华为、联想、海航、上汽、壳牌等。

    在史凯看来,数据中台当前处于上升发展期。虽然未来数据中台未必还叫做数据中台,但它一定会成为企业必备的基础组件。

    世界正在从信息化向数字化发展。信息化是指大部分的工作都在物理世界里完成,然后用信电脑的数字化世界解决一小部分问题。数字化则是把人从物理世界搬到数字化世界。从这个角度来讲,数据中台将会变成物理世界的业务在数字化世界的一个还原。

    数据中台设计的初衷是将计算与存储分离,从狭义上来说,真正最核心的数据中台可以是没有存储的。但就当前的情况来看,广义的数据中台在未来一段时间内仍会涵盖数据仓库、数据湖等存储组件,“数据工厂”这个概念可能更适用于现在的阶段。但随着数据中台的发展,未来很有可能不再需要数据湖了。

    最后,史凯也提到了阿里中台战略中的另一个中台——“业务中台”。他表示“当前业务中台更偏实时交易,是从上往下沉淀业务;数据中台目前更偏分析、决策和洞察,为业务提供 T+N 和 T+0 的数据服务,但是再往前走,数据中台跟交易会慢慢结合得更为紧密。随着计算能力越来越强,以及微服务架构的进一步发展,未来业务中台和数据中台可能会融为一体。”

    采访嘉宾

    史凯,ThoughtWorks 数据和智能总监,精益数据创新体系的提出者,2019 年被评选为 DataIQ100 的数据赋能者,有近 20 年年的企业信息化、数字化转型架构和实施经验,为众多大型客户提供数字化转型战略略规划和咨询实施服务。

    技术雷达是 ThoughtWorks 推出的公益的、不限行业的技术选型趋势报告,至今已坚持十年,旨在以雷达的表现形式,通过清晰的解读,给技术人员提供高质量、落地性强的技术平台、工具框架方面的选型指导,助力企业数字化转型。


    推荐阅读

    1

    跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!

    2

    跟繁琐的模型说拜拜!深度学习脚手架 ModelZoo 来袭!

    3

    只会用Selenium爬网页?Appium爬App了解一下

    4

    妈妈再也不用担心爬虫被封号了!手把手教你搭建Cookies池

    崔庆才

    静觅博客博主,《Python3网络爬虫开发实战》作者

    隐形字

    个人公众号:进击的Coder

    640?wx_fmt=gif640?wx_fmt=jpeg640?wx_fmt=gif

    长按识别二维码关注


    好文和朋友一起看~
    展开全文
  • 数据挖掘系列的第一篇,介绍了关于数据挖掘的基本概念以及关于数据的方方面面,建立对于数据数据挖掘的基本认识。
  • mysql获取每个分类下面的前五条数据

    万次阅读 2018-05-25 11:43:35
    现在项目遇到个问题,我电商网站,商品有很多分类,我想取出每个分类下面的前五条数据,应该怎么做呢? 数据结构如下: DROP TABLE IF EXISTS `products`; CREATE TABLE `products` ( `id` int(10) unsigned NOT ...
  • 什么数据结构

    万次阅读 2007-03-19 10:30:00
    它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系,而物理上的数据结构...
  • 数据仓库多维数据模型设计

    万次阅读 2017-11-09 18:14:59
    建设数据模型既然是整个数据仓库建设中一个非常重要的关键部分,那么,怎么建设我们的数据仓库模型就是我们需要解决的一个问题。这里我们将要详细介绍如何创建适合自己的数据模型。 数据仓库建模方法 大千世界,...
  • 什么是人工智能、机器学习、深度学习、数据挖掘以及数据分析?本文尝试给出自己的理解和认知。
  • 2019年就这么匆匆过去了,就在前几天国家电影局发布了2019年中国电影市场数据数据显示去年总票房为642.66亿元,同比增长5.4%;国产电影总票房411.75亿元,同比增长8.65%,市场占比 64.07%;城市院线观影人次17.27...
  • 数据挖掘面试 150 道题(附答案)

    万次阅读 多人点赞 2019-09-21 13:50:38
    1. 某超市研究销售纪录数据后发现,买啤酒的人很大概率也会购买尿布,这种属于数据挖掘的哪类问题?(A) A. 关联规则发现 B. 聚类 C. 分类 D. 自然语言处理 2. 以下两种描述分别对应哪两种对分类算法的评价标准...
  • 海量数据处理技巧

    万次阅读 2018-08-02 20:07:18
    数据时代来临,数据量的爆炸式增长是最为显著的特征。...我将在下面介绍一些基本的海量数据处理的方法,供大家参考。需要明确的一点是,现实情况复杂多变,所以对于海量数据处理这样大的主题,是不可能用一...
  • 数据预处理

    千次阅读 2016-07-15 21:05:01
    1.Why为什么要进行数据预处理 坊间传言,工业界大部分机器学习、数据挖掘业务80%在倒腾数据,20%在研究算法。 数据质量不高,再好的模型也没用 数据没问题,但因为一些形式的问题,一些模型也会不work,比如说LR、...
  • 数据时代程序员必备技能:数据可视化

    千次阅读 多人点赞 2019-03-01 14:48:33
    说到数据可视化,大家可谓耳熟能详,设计师、数据分析师、...走在马路上,更容易被图形而不是文字吸引…这并不是因为我们聪明,只是大脑讨厌枯燥的数据,天生喜欢鲜明直观的可视化图形。 下面我们看个例子。 2018...
  • 数据划分

    万次阅读 2018-08-27 10:22:25
    这段时间在研究自然语言处理的相关问题,主要是学习如划分分数据,尝试过利用机器学习中的相关的知识建立模型对数据进行评分后加以划分,但是由于语料库的不足导致训练出的模型对数据的区分度不够,另一方面也是因为...
  • 数据结构 Hash表(哈希表)

    万次阅读 多人点赞 2018-05-20 01:23:34
    参考链接:数据结构(严蔚敏) 什么是Hash表 要想知道什么是哈希表,那得先了解哈希函数 哈希函数 对比之前博客讨论的二叉排序树 二叉平衡树 红黑树 B B+树,它们的查找都是先从根节点进行查找,从节点取出...
  • 数据结构与算法学习笔记

    万次阅读 多人点赞 2018-09-25 13:55:49
    本文是王争老师的《算法与数据结构之美》的学习笔记,详细内容请看王争的专栏。有不懂的地方指出来,我做修改。 数据结构与算法思维导图 数据结构指的是“一组数据的存储结构”,算法指的是“操作数据的一组...
  • 通过观察数字和统计数据的转换以获得清晰的结论并不是一件容易的事。必须用一个合乎逻辑的、易于理解的方式来呈现数据。 (一)谈谈数据可视化 人类的大脑对视觉信息的处理优于对文本的处理——因此使用...
  • 浅析数据一致性

    万次阅读 2016-02-19 15:27:38
    什么数据一致性?  在数据有多分副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突。 实践中,导致数据不一致的情况...
  • 文章目录行为分析数据集:疲劳驾驶数据集异常行为监控数据集三维卷积特征提取器:100G异常行为数据集送上:异常行为数据集(图像)公众号来袭 行为分析数据集: oops数据集,近21000个视频的异常行为视频帧,截取...
  • 什么数据驱动编程

    万次阅读 多人点赞 2011-08-03 22:25:35
    数据驱动编程可以用来做什么: 如上例所示,它可以应用在函数级的设计中。 同时,它也可以应用在程序级的设计中,典型的比如用表驱动法实现一个状态机(后面写篇文章专门介绍)。 也可以用在系统级的设计中...
  • 什么是元数据

    万次阅读 2009-11-10 16:48:00
    Java与元数据数据是关于数据数据。在编程语言上下文中,元数据是添加到程序元素如方法、字段、类和包上的额外信息。 元数据的作用 一般来说,元数据可以用于创建文档,跟踪代码中的依赖性,执行编译时检查,...
  • springcloud 返回的数据为XML 而不是JSON

    千次阅读 2019-03-30 17:42:20
    本人的原因是因为引入了jackson-dataformat-xml依赖导致的,下面查看自己项目是否包含此依赖,如果包含的话,可以去掉。 本人去掉此依赖后,就好了。追根到底发现,依赖jackson-dataformat-xml的项目中也没有直接...
  • JS数据类型之基本数据类型

    万次阅读 多人点赞 2019-06-28 16:46:43
    一、数据类型简介: 1.JavaScript(以下简称js)的数据类型分为两种:原始类型(即基本数据类型)和对象类型(即引用数据类型); 2.js常用的基本数据类型包括undefined、null、number、boolean、string; 3.js的...
  • 数据仓库常见建模方法与建模实例演示

    万次阅读 多人点赞 2020-04-14 15:52:09
    什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在 性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑 访问性能:能够快速查询所需的数据,减少数据...
  • 数据可视化的优点是什么(一)

    千次阅读 2019-03-05 16:29:34
    数据可视化在数据分析中发挥着重要的作用,很多人认为数据可视化是一个比较难的技术,其实并不是这样的,数据可视化在数据分析中涉及到的众多技术中算是一个比较简单的技术。一般来说,数据可视化是以饼状图等图形的...
  • 教你如何迅速秒杀掉:99%的海量数据处理面试题

    万次阅读 多人点赞 2012-03-22 12:51:07
    教你如何迅速秒杀掉:99%的海量数据处理面试题作者:July出处:结构之法算法之道blog前言 一般而言,标题含有“秒杀”,“99%”,“史上最全/最强”等词汇的往往都脱不了哗众取宠之嫌,但进一步来讲,如果读者读罢...
  • 不懂统计学的数据分析师都不是好的数据分析师,多数的数据分析师课程都讲Python的应用,又不是开发代码敲的那么好有什么用?不学统计的Python数据分析课程都不是好课程,不如抽空多看看统计学的内容。 本文介绍 ...
  • 深入理解数据压缩与重复数据删除

    万次阅读 热门讨论 2011-04-14 20:29:00
    数据压缩与重复数据删除两种技术有何区别与联系呢?实际中又该如何正确应用呢?笔者之前对数据压缩原理和技术没有研究,因此做了点功课,查阅整理了相关资料,并与重复数据删除技术进行对比分析。
  • [导读] “大数据时代”,数据为王!无论是数据挖掘还是目前大热的深度学习领域都离不开“大数据”。大公司们一般会有自己的数据,但对于创业公司或是高校老师、学生来说,“Where can I get large datasets open ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,215,068
精华内容 886,027
关键字:

下面什么不是数据