数据中台虽然已经在口碑上跌下神坛,甚至一些企业开始拆中台。但是,笔者在客户咨询过程中经常遇到一种情况,企业仍然喜欢打着“数据中台”的名义沟通项目需求,但背后的需求很多时候都是数据统一管理和统一服务。
可能数据中台给企业留下的印象太深了,感觉像是一剂万能药,没有数据中台解决不了的数字化难题。那么,什么企业适合上数据中台呢?

一,搞清楚数据中台的核心是什么
别着急,为了解答上面这个终极问题,先看看数据中台的核心目的是什么。用阿里对数据中台的定义解释是,将企业的核心能力随着业务不断发展以数字化形式沉淀到平台,形成以服务为中心,由业务中台和数据中台构建起数据闭环运转的运营体系,供企业高效地进行业务探索和创新,实现以数字化资产的形态构建企业核心差异化竞争力。
可见,数据中台的创新之处就在于提倡把“数据资产”作为一个生产要素独立出来,让成为资产的数据作为生产资料融入业务价值创造过程,持续产生价值。简单来说,就是把数据复用起来,注意这里笔者这里说的不仅是用,而是“复用”。
经常有人将数据平台与数据中台进行对比。数据平台更为关注的技术,包括研发效率、平台的大数据处理能力等,往往服务的是技术人员。数据中台最关注的是数据服务,直接服务的是业务场景,当然面向的不仅有技术人员,还需要面向多个部门的业务人员。
二,到底什么企业适合上数据中台?
搞清楚数据中台的核心之后,接下来讨论什么企业适合上数据中台。有很多数据中台案例都印证了,千万别为了上中台而上,那只会让企业投资白白浪费,让中台项目负责人进退两难。
要上数据中台,企业首先来回答这几个问题:
1,企业有没有那么多数据需要复用?
最基本的,企业是否实现了业务的数据化,有一定的数据沉淀下来作为复用的基础。进一步,企业是否有大量的数据应用场景,需要数据中台快速转化成数据产品去复用?例如,电商运营中有各种各样数据共享的应用场景。
2,企业有没有那么多数据孤岛需要关联?
数据中台是由阿里这样的互联网公司提出并推广开的,因为互联网公司有足够多的应用系统需要关联打通,才能更好地做关联分析。所以,一些传统行业的企业需要评估,企业是否存在较多的业务数据的孤岛,需要整合各个业务系统的数据,进行关联的分析。例如,很多传统企业也开始运营电商,仓储、供应链、市场运营等原本都是独立的数据仓库。
3,企业有没有那么多的数据开发要中台替代?
如果只是前面两种情况,笔者认为还没有足够的理由上中台,企业有足够合适的IT人员一样可以正常运营。所以,企业需要在IT投资成本上权衡一下,IT团队是否正面临效率、质量和成本的苦恼中?面对大量业务及前端提出的数据开发需求不知道如何提高效能?尤其,当企业需要通过数据实现精益运营,数据经常出问题导致IT人员无暇顾及更为重要的开发任务?
三,有没有上不上中台的判断方法?
道理都懂,有没有一种方法来判断一个企业需不需要上中台?参照“美国国家标准技术研究院”的技术战略选择分析流程图,来给企业来做个参考。以下五条,任意满足三个及以上,企业就可以考虑上数据中台了。
1,是否大型复杂生态系统?
中台战略解决复杂生态系统的治理问题,如果不是复杂生态系统,或许ERP或企业信息管理系统更适合。什么是复杂生态系统?请参考国内的这些大企业:BATJ、海尔、华为、小米等。

中台判断方法(来源于“技术领导力”)
2,是否业务具备不确定性?
大中台,小前台,具备快速试错,快速反应能力。如果你的业务场景变化不大,也许服务化,组件化就能满足。什么能称之为市场环境变化快?如互联网行业以及产业互联网相关行业。
3.是否存在低水平重复建设?
中台架构解决大量重复建设问题,如果你的企业不存在这个问题,说明IT治理并不是眼下最紧迫的问题。什么是低水平重复建设问题?比如如整个企业光ERP就有3套,还分属不同供应商的产品。
4.是否存在数据互联互通问题?
构建数据中台只是实现数据一体化治理的方法之一,这项功能通过数仓也可以解决。什么是数据一体化治理?就是打通不同部门不同系统之间的数据孤岛,拆除烟囱式数据应用,这并不是数据中台独有的功能。
5.是否信息技术制约企业发展?
如果信息技术已经制约企业发展,需要整体技术升级,业务重构,数据中台战略只是途径之一。很多大型集团都存在这样的问题,IT建设一直在持续,经历了信息技术时代,互联网时代、大数据时代直到AI时代,通过几代IT人员的迭代,积累了大量的企业IT资产但有些已经阻碍企业发展,引入中台架构或许可以迎来新的变革时代。
三,如何规避数据中台的投资风险——轻量级数据中台
不管最后,企业是否决定自己要建设数据中台,都不能忽视建设数据中台面临的风险。
一方面企业需要花费千万级费用投入到系统建设中,另外数据中台的建设离不开系统支撑,研发系统需要投入大量的人力,数据中台建成之后面对大量的数据需求,仍需要花费额外的人力去做数据模型的重构。
而这个时候,企业是否能够匹配中台仍未可知,还需要持续打磨。近几年,大公司拆数据中台的事件时有耳闻。
有没有什么办法能够将数据中台项目的风险降至最低呢?可以考虑一下近些年备受关注的麦聪软件轻量级数据中台——麦聪DaaS平台。目前,麦聪软件官网提供麦聪DaaS平台社区版的免费下载试用。
1,无需再做任何的数据迁移:轻量级数据中台直接基于元数据做管理,无需企业再新建一个“中间库”集成各应用系统的数据,原有数仓、数据湖、湖仓都可以继续发挥价值。
2,全面支持所有主流数据源:不管是常见的关系型数据库MySQL,Oracle,MS SQL,PostgreSQL等,还是大数据平台CDH/HDP、开源Hadoop等,又或者是华为、阿里的数据中台等统统支持。

麦聪软件的轻量级数据中台产品架构
3,轻松构建全域数据资产目录:接入数据源的同时就完成元数据采集,帮企业构建了全域数据资产目录,也有人称为数据地图。可以根据标签灵活管理,并且可以设定固定时间更新元数据目录,实现对企业数据资产的实时管理。
4,高效的数据服务开发和管理:面对业务和前端的数据服务需求,只需要几行简单配置或几行SQL语言就可以完成一个数据产品的开发,满足内外部人员的数据共享需求,修改复用都是分分钟的事情。原本一个工程师响应几十个数据服务请求就够忙了,现在即便面对几百上千个数据服务请求也能分分钟搞定。
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
为什么4.1%2返回0.0999999999999996?但是4.2%2==0.2。 最佳答案 参见此处:WhatEveryProgrammerShouldKnowAboutFloating-PointArithmetic实数是无限的。计算机使用的位数有限(今天是32位、64位)。因此计算机进行的浮点运算不能代表所有的实数。0.1是这些数字之一。请注意,这不是与Ruby相关的问题,而是与所有编程语言相关的问题,因为它来自计算机表示实数的方式。 关于ruby-为什么4.1%2使用Ruby返
它不等于主线程的binding,这个toplevel作用域是什么?此作用域与主线程中的binding有何不同?>ruby-e'putsTOPLEVEL_BINDING===binding'false 最佳答案 事实是,TOPLEVEL_BINDING始终引用Binding的预定义全局实例,而Kernel#binding创建的新实例>Binding每次封装当前执行上下文。在顶层,它们都包含相同的绑定(bind),但它们不是同一个对象,您无法使用==或===测试它们的绑定(bind)相等性。putsTOPLEVEL_BINDINGput
我可以得到Infinity和NaNn=9.0/0#=>Infinityn.class#=>Floatm=0/0.0#=>NaNm.class#=>Float但是当我想直接访问Infinity或NaN时:Infinity#=>uninitializedconstantInfinity(NameError)NaN#=>uninitializedconstantNaN(NameError)什么是Infinity和NaN?它们是对象、关键字还是其他东西? 最佳答案 您看到打印为Infinity和NaN的只是Float类的两个特殊实例的字符串
如果您尝试在Ruby中的nil对象上调用方法,则会出现NoMethodError异常并显示消息:"undefinedmethod‘...’fornil:NilClass"然而,有一个tryRails中的方法,如果它被发送到一个nil对象,它只返回nil:require'rubygems'require'active_support/all'nil.try(:nonexisting_method)#noNoMethodErrorexceptionanymore那么try如何在内部工作以防止该异常? 最佳答案 像Ruby中的所有其他对象
关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion为什么SecureRandom.uuid创建一个唯一的字符串?SecureRandom.uuid#=>"35cb4e30-54e1-49f9-b5ce-4134799eb2c0"SecureRandom.uuid方法创建的字符串从不重复?
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or