为什么Web前端要学习JavaScript

为什么Web前端要学习JavaScript,第1张

今天小编要跟大家分享的文章是关于为什么Web前端要学习JavaScript最近跟多项目招聘经理都在说找一个好的程序员有多难,也渐渐意识到了现在编程语言越来越倾重于JavaScript。Web开发人员尤其如此。所以,如果你是一个Web前端工程师,那么你应该去学习JavaScript。

原因主要有以下几点:

一、需求

我之所以这样说的主要原因是,随着JavaScript的日渐成熟,以及Nodejs方案变得越来越可行,我们对JavaScript程序员的需求正在持续增长。JavaScript在需求比例上已经超过了C#,仅屈居于Java之下。如果你看看GitHub上可行的项目,你会发现JavaScript出现得越来越多,甚至领先于Java和C#。最后,再看看StackOverflow,你会发现JavaScript也处于顶层活跃中。

二、更好的薪酬

根据SitePoint,JavaScript的薪资要高于C#。当然,虽然现在Java的薪水还是比JavaScript高上那么一点。但随着JavaScript需求的增长,你可以预见它的薪酬肯定会提高。

在Gooroo,关于薪酬VS需求呈现的画面略有不同。虽然我们对JavaScript的需求是显而易见的,但是很明显,几种需求较小的语言反而薪酬更高。我怀疑这是因为许多公司仍然认为JavaScript是任何一个程序员都会用的语言。但是,当他们认识到“任何一个程序员都会JavaScript”,实际上是“任何一个程序员只会写蹩脚的JavaScript代码”的时候,也是他们经历惨痛教训的时候。然后需要真正的JavaScript程序员进入清理留下的烂摊子。

在StackOverflow,我们看到了一份非常详细的关于开发人员在过去三年时间中的归类。当你最后看到“使用的技术”部分的时候,我们发现,如果你称自己为JavaScript程序员(这里假设是在客户端),那么你得到的报酬虽然比C#程序员低,但会比Java程序员要好,但如果你说自己是一个Nodejs程序员(全JavaScript),那么你能拿到第二高的工资。唯一比Nodejs还高的是Objective-C(我假设以后会是,Swift)。

三、JavaScript愈来愈趋成熟

新的JavaScript标准每年都会发布,而且现在很明显,被添加到JavaScript的语法糖(Syntactic

Sugar)的数量每年都在增加。其中一个我期待的功能是,能在我的JavaScript代码中使用异步和await关键字,以消除回调地狱(callback

hell)。

你越早开始学习JavaScript,那么学习起来就越容易。所有的改变都是循序渐进的,就像浏览器正在不断地改进处理JavaScript代码的能力。可以预见在不久的将来,浏览器不仅可以缓存JavaScript文件,还可以缓存JavaScript文件的编译版本。

四、JavaScript的前端更能被委以重任

大概在一年前我和我的一个老朋友聊天的时候,他提到,他是他们小组(约20个程序员)唯一一个用这样的方式写JavaScript以消除变量对全局范围的污染的程序员。这只是最简单的例子。很多人称自己为JavaScript程序员,却不知道这些基本知识。所以,JavaScript大有可为。

而且不要忘了,现在很多支持性能分析和内存泄漏的工具才刚处于起步阶段。如果你现在就掌握了这些技能,那么将来肯定可以更好地推销自己。

五、日趋完善的框架

Angular的新版本正在开发中,而且还有Aurelia作为候选。商业产品如Scencha的EXTjs。还有用于服务器端编程的Nodejs。等等等等。用JavaScript开发实际的应用程序并不太难。我敢保证,如果我愿意的话,我完全可以只用JavaScript来写一个可以运行的桌面应用程序。嘿嘿。

六、6JavaScript无处不在

JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流 *** 作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。而后端代码是用什么编写的则无所谓——不管是Java,PHP,NET,Nodejs还是其他——但是客户端就一定需要一个JavaScript开发人员。事实上,现在很多开发人员依然没有认识到JavaScript有多么强大。不知道正在阅读的你是否也是这些井底之蛙的一员。如果你确实是一个了不起的JavaScript程序员,那么基本上所有有关于服务器端平台的工作都能够胜任。如果再了解这些平台基本上就可以上任了。

七、JavaScript是一种编译语言

这也许会吓你一跳,从技术上说,JavaScript是一种编译语言。这有两个含义。首先,一旦代码被编译,它的运行速度或许就能媲美于任何其他可执行文件。其次,为JavaScript写工具在技术上是可行,并且将会创建一个不必每次加载代码到内存中时就重新编译的二进制文件。

以上就是小编今天为大家分享的关于为什么Web前端要学习JavaScript的文章,希望本篇文章能够对正在从事Web前端工作或者学习的小伙伴们有所帮助。想要了解更多Web前端相关知识记得关注北大青鸟Web培训官网!

原文:7ReasonsEveryProgrammerNeedstoLearnJavaScript

一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无分。1“软件工程的概念是为解决软件危机而提出的”这句话的意思是( )A强调软件工程成功解决了软件危机的问题B说明软件危机的存在总是使软件开发不像传统工程项目那样容易管理C说明软件工程这门学科的形成是软件发展的需要D说明软件工程的概念,即:工程的原则、思想、方法可解决当时软件开发和维护存在的问题2瀑布模型的主要特点是( )A将开发过程严格地划分为一系列有序的活动B将开发过程分解为阶段C提供了有效的管理模式D缺乏灵活性3在软件工程的需求分析阶段,不属于问题识别内容的是( )A功能需求B性能需求C环境需求D输入/输出需求4画某系统的数据流图时,顶层图有( )A0张B1张C2张D3张及其以上5软件模块内聚性最强的是( )A功能内聚B通信内聚C偶然内聚D逻辑内聚6最早提出软件系统维护问题的阶段是( )A可行性分析B需求分析C概要设计D详细设计7SD(结构化设计)方法设计的结果是( )A模块B模块结构图C模块的算法D数据流图8在进行软件测试时,首先应当进行以下哪项测试,然后再进行组装测试,最后再进行有效性测试( )A单元测试B系统测试C集成测试D确认测试9软件详细设计阶段的任务是( )A算法与数据结构设计B功能设计C调用关系设计D输入/输出设计10下列属于静态测试方法的是( )A黑盒法B路径覆盖C白盒法D人工检测11Fortran语言主要作为以下哪个方面的语言( )A科学工程计算B系统软件C事务处理D人工智能12用结构化语言来描述加工逻辑的外层结构时,以下不属于基本结构的是( )A顺序结构B选择结构C嵌套结构D重复结构l3可维护软件的主要特性包括( )A可理解性、可修改性、可移植性B可使用性C可维护性、可使用性、可靠性D可测试性14程序设计语言不具有的特性是( )A心理特性B工程特性C应用特性D技术特性15下列不属于项目进度安排主要方法的是( )A工程网络图BGantt图C进度结构图D任务资源表16下列不属于通常冗余技术的是( )A结构冗余B信息冗余C时间冗余D代码冗余17下列工具中,属于需求追踪工具的是( )A在DBMS上的应用运行工具B追踪和状态报告C访问和版本控制机构D文件和修改管理18关于软件测试的目的,下面观点错误的是( )A为了发现错误而执行程序的过程B一个好的测试用例能够发现至今尚未发现的错误C证明程序是正确、没有错误的D一个成功的测试用例是发现了至今尚未发现的错误的测试19在制定项目开发计划文档时,不包含的内容是( )A项目概述B实施计划C测试计划D交付期限20面向对象的开发方法中,以下哪种方法原是面向Ada语言的,并处于面向对象开发方法的奠基性地位( )ABooch方法BCoad方法CUML语言DOMT方法二、填空题(本大题共10小题,每小题2分,共20分)请在每小题的空格中填上正确答案。错填、不填均无分。21可行性研究从技术可行性、经济可行性、________三方面进行分析。22IDEF0方法用来描述系统的功能活动及其联系,建立系统的_______模型。23结构化方法总的指导思想是_______逐层分解。24在一段程序中,将多次出现的一组语句设计为一个子程序,供多个部分调用,这种情况出现的内聚称为________。25软件部件的内部实现与外部可访问性分离,这是指软件的______。26用来模拟被测模块的上级调用模块的模块称为_______。27软件复杂性度量的参数很多,主要有规模、_______、结构、智能度。28软件开发环境中最主要的组成部分是______。29软件工程管理的具体内容包括对开发人员、组织机构、用户和______等方面的管理。30增量模型根据增量方式和形式的不同,分为_____和原型模型。三、名词解释题(本大题共5小题,每小题3分,共15分)31过程设计语言(PDL)32可移植性33渐增式测试34详细设计35条件覆盖四、简答题(本大题共4小题,每小题5分,共20分)36软件生存周期可以分为几个阶段,每个阶段的提交物是什么?37结构化分析的描述工具有哪些?简述结构化分析的步骤。38什么是黑盒测试法?常用的黑盒测试方法有哪些?39简述面向对象的特征。五、应用题(本大题共2小题,第40小题10分,第41小题15分,共25分) 40某个学生成绩管理系统的部分功能如下:(1)基本信息管理:教务管理人员输入或修改学期教学执行计划、学生名单和教师名单;(2)学生选课:学生根据教学执行计划进行选课;(3)分配任课教师:教务管理人员为符合开课条件的课程分配教师,并打印任课通知单给教师;(4)成绩管理:每门课程的教师在考试评分结束后将考试成绩交给教务管理人员,教务管理人员输入、维护成绩,系统可生成成绩单(发给学生)、成绩统计分析表(发给教务管理人员)。请根据要求画出该问题的分层数据流图(要求画出顶层和0层数据流图)。 一、单项选择题(在每小题的四个备选答案中选出一个正确答案,并将其号码填在题后的括号内。每小题1分,共20分) 1 “软件危机”是指( ) A 计算机病毒的出现 B 利用计算机进行经济犯罪活动 C 软件开发和维护中出现的一系列问题 D 人们过分迷恋计算机系统 2 DFD中的每个加工至少需要( ) A 一个输入流 B 一个输出流 C 一个输入或输出流 D 一个输入流和一个输出流 3 为了提高模块的独立性,模块之间最好是( ) A 控制耦合 B 公共耦合 C 内容耦合 D 数据耦合 4 下面关于PDL语言不正确的说法是( ) A PDL是描述处理过程怎么做 B PDL是只描述加工做什么 C PDL也称为伪码 D PDL的外层语法应符合一般程序设计语言常用的语法规则 5 详细设计与概要设计衔接的图形工具是( ) A DFD图 B 程序图 C PAD图 D SC图 6 不适合作为数据处理与数据库应用的语言是( ) A SQL B Cobol C 4GL D Lisp 7 下列关于功能性注释不正确的说法是( ) A 功能性注释嵌在源程序中,用于说明程序段或语句的功能以及数据的状态 B 注释用来说明程序段,需要在每一行都要加注释 C 可使用空行或缩进,以便很容易区分注释和程序 D 修改程序也应修改注释 8 下列关于效率的说法不正确的是( ) A 效率是一个性能要求,其目标应该在需求分析时给出 B 提高程序效率的根本途径在于选择良好的设计方法,数据结构与算法 C 效率主要指处理机时间和存储器容量两个方面 D 程序的效率与程序的简单性无关 9 测试的关键问题是( ) A 如何组织对软件的评审 B 如何验证程序的正确性 C 如何采用综合策略 D 如何选择测试用例 10 结构化维护与非结构化维护的主要区别在于( ) A 软件是否结构化 B 软件配置是否完整 C 程序的完整性 D 文档的完整性 11 软件维护困难的主要原因是( ) A 费用低 B 人员少 C 开发方法的缺陷 D 得不到用户支持 12 可维护性的特性中,相互矛盾的是( ) A 可理解性与可测试性 B 效率与可修改性 C 可修改性和可理解性 D 可理解性与可读性 13 快速原型是利用原型辅助软件开发的一种新思想,它是在研究( )的方法和技术中产生的。 A 需求阶段 B 设计阶段 C 测试阶段 D 软件开发的各个阶段 14 从目前情况来看,增量模型存在的主要问题是( ) A 用户很难适应这种系统开发方法 B 该方法的成功率很低 C 缺乏丰富而强有力的软件工具和开发环境 D 缺乏对开发过程中的问题和错误具有应付变化的机制 15 下列有关软件工程的标准,属于行业标准的是( ) A GB B DIN C ISO D IEEE 16 下列文档与维护人员有关的有( ) A 软件需求说明书 B 项目开发计划 C 概要设计说明书 D *** 作手册 17 在屏蔽软件错误的冗错技术中,冗余附加件的构成包括( ) A 关键程序和数据的冗余存储和调用 B 为检测或纠正信息在运算或传输中的错误须外加的一部分信息 C 检测、表决、切换、重构、纠错和复算的实现 D 实现错误检测和错误恢复的程序 18 ( )是为了确保每个开发过程的质量,防止把软件差错传递到下一个过程而进行的工作。 A 质量检测 B 软件容错 C 软件维护 D 系统容错 19 表示对象相互行为的模型是( )模型。 A 动态模型 B 功能模型 C 对象模型 D 静态模型 20 CASE工具的表示集成是指CASE工具提供相同的( ) A 编程环境 B 用户界面 C 过程模型 D 硬件/ *** 作系统 二、填空题(每空2分,共20分) 1 作为计算机科学技术领域中的一门新兴学科,软件工程主要是为了解决________问题。 2 投资回收期就是使________等于最初的投资费用所需时间。 3 在IDEF0方法的一个活动图形中控制活动是指________。 4 划分模块时尽量做到________,保持模块的独立性。 5 PAD图是一种________展开的二维树形结构。 6 对校正性维护应该从________的严重性开始。 7 类的实例化是________。 8 人们常用硬件可靠性的定量度量方法来度量软件的可靠性和可用性,常用的度量软件可靠性的两个指标是________和________。 9 将待开发的软件细化,分别估算每一个子任务所需要的开发工作量,然后将它们加起来,将得到软件的总开发量。这种成本估算方法称为________。 三、名词解释(每小题3分,共15分) 1 需求分析 2 耦合性 3 结构化程序设计 4 状态图 5 软件配置管理 四、简答题(每小题5分,共20分) 1 简述演绎法调试的具体步骤。 2 简述增量模型和瀑布模型的本质区别。 3 简述设计一个容错系统的步骤。 4 简述在项目开发时,选择程序设计语言应考虑因素。 五、应用题(第1题6分,第2小题8分,第3小题11分,共25分) 1 某部门要处理大批单据所组成的事务文件,单据分为进货单和发货单两种,每种 单据由多行组成,每行包括零件号、零件名称、数量三个数据项。 要求:用Jackson方法表示事务文件的数据结构。(6分) 2 根据以下被测试的流程图,选择相应的答案。(8分) (1) A=2, B=0, X=4 (2)A=2, B=1, X=1 (3)A=2, B=0, X=1 A=1, B=1, X=1 A=3, B=0, X=3 A=1, B=1, X=2 ①在1-3的答案中满足判定覆盖的测试用例是________ (2分) ②在1-3的答案中满足条件覆盖的测试用例是________ (2分) ③在1-3的答案中满足判定/条件覆盖的测试用例是________ (2分) (4)A=2, B=0, X=4 (5)A=2, B=0, X=4 (6)A=2, B=0, X=4 A=2, B=1,X=1 A=2, B=2, X=1 A=1, B=1, X=1 A=1, B=0,X A=1, B=0, X=3 A=1, B=1, X=4 A=1, B=1,X=1 A=1, B=2, X=2 A=3, B=0, X=3 ④在4-6的答案中满足条件组合覆盖的测试用例是________(1分) ⑤在4-6的答案中满足路径覆盖的测试用例是________(1分) 3 某电视购物公司采用面向对象技术实现商品销售计算机系统,基本需求如下: (1)公司提供多种类商品,每种商品通过委托订单来进行征订。 (2)公司下属多个分公司,每个分公司负责本地区委托订单的收录,打印收款凭证单。 (3)公司负责分类、统计各分公司送来的委托单,进行分类统计。 要求:按照上述模型建立对象模型。(11分) 一、

1C 2D 3D 4B 5D 6D 7B 8D 9D 10D 11C 12B 13A 14C 15D 16C 17D 18A 19A 20B

二、

1如何建立一个软件系统

2积累的经济效益

3所受到的约束条件

4高内聚低耦合

5有左往右

6评价错误

7对象

8MTTF MTBF

9自底向上估算方法

三、

1 需求分析是指,开发人员要准确理解用户的要求,进行细致的调查分析,将用户非形式的需求陈

述转化为完整的需求定义,再由需求定义转换到相应的形式功能规约(需求规格说明)的过程。

2 耦合性也称块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。

3 结构化程序设计是实现该目标的关键技术之一,它指导人们用良好的思想方法开发易于理解、易于验证的程序。 结构化程序设计方法的基本要点是: 1)采用自顶向下、逐步求精的程序设计方法

2)使用三种基本控制结构构造程序 3)主程序员组的组织形式。

4 状态图是一个标准的计算机概念,它是有限自动机的图形表示,它反映了状态与事件的关系,状态图确定了由事件序列引起的状态序列。

5 软件配置管理,简称SCM,它用于整个软件工程过程。其主要目标是:标识变更;控制变更;确保变更正确地实现;报告有关变更。SCM是一组管理整个软件生存期各阶段中变更的活动。

四、

1演绎法调试步骤:列出所有可能的错误原因的假设;排除不适当的假设;精化余于的假设;证明余于的假设。

2瀑布模型属于整体开发模型,它规定在开始下一个阶段的工作之前,必须完成前一阶段的所有细节。而增量模型属于非整体开发模型,它推迟某些阶段或所有阶段中的细节,从而较早的产生工作软件。 3(1)按设计任务要求进行常会设计,尽量保证设计的正确

(2)对可能出现的错误分类,确定实现容错的范围

(3)按照“成本—效率”最优原则,选用某种冗余手段(结构,信息,时间)来实现对各类错误的屏蔽

(4)分析或验证上述冗余结构的容错效果

4(1)项目的应用领域;(2)软件开发的方法 (3)软件执行的环境(4)算法和数据结构的复杂性(5)软件开发人员的知识(选自不倒翁的博客)

可以这么说,在java中,一切皆对象,最简单的测试,new一个list存放,存放的是Object类型,然后无论你new什么对象,都可以直接往这个list存放,这就说明,Object是那个对象的父类

代码书写规则通常对应用程序的功能没有影响,但它们对于改善源代码的理解是有帮助的。养成良好的习惯对于软件的开发和维护都是很有益的。

一篇编写规范的代码,不仅让自己维护起来更加方便,也会让其他读者觉得赏心悦目~快来看看如下10点

第一点:源代码文件以文件内容中的最顶层的Java类命名,而且大小写敏感,文件扩展名为java,同时,文件的编码格式统一为UTF-8。

第二点:类的命名遵循大驼峰命名法UpperCamelCase,而方法名和变量名的命名遵循小驼峰命名法lowerCamelCase。常量名使用大写字母表示,单词之间以下划线分隔jsp的文件名全部小写。

第三点:一个程序文件最好不要超过2000行。

第四点:不用的代码和引用删除

第五点:请合理运用空行。空行可以用来隔开相对独立的代码块,有利于阅读和理解。但是不要使用超过一行的空行,对空间,别太奢侈了。

第六点:为不容易理解类变量注释。注释代码段,注释逻辑选择。

第七点:对成员方法,不要轻易采用public的成员变量。主要的修饰符有public,private,protected。避免过多的参数列表,尽量控制在5个以内。

第八点:原则上关系密切的行应对齐,对齐包括类型、修饰、名称、参数等各部分对齐。另每一行的长度不应超过屏幕太多,必要时适当换行,换行时尽可能在","处或运算符处,换行后最好以运算符打头。

第九点:为避免编程时遇到麻烦,请保证在自己类路径指到的任何地方,每个名字都仅对应一个类。否则,编译器可能先找到同名的另一个类,并报告出错消息。

第十点:字符串不应该重复,如果多次用到同一字符串,建议将该字符串定义为字符串常量,再引用。

先说一句,不要听信网上那些培训学校的托儿们乱忽悠说学网络能找到多么好的工作!网络工程师多么高薪的职业!其实都是在忽悠你因为网络学的内容杂,速成快,他们赚钱也快

我建议有能力的情况下最好自学程序设计

软件程序员的前景要大大的好过网络管理员

程序设计工程师,程序测试工程师,不论是在月薪,福利,工作环境,发展前景,都要好过网络工程师因为它只需要在办公室里,在笔记本上完成代码的编写,而且软件程序设计是团队合作,公司里会有人带你,你给企业编写出好的程序,程序就是企业的商品,商品做的好,自然待遇丰厚,高的可以突破1W以上,是网络工程师平均工资的好几倍消耗脑力,需要注意营养和作息时间的调整

反观网络管理员,维护和组建网络,一旦网络组建完成了,基本上不会有太大的变动,基本上组一次网就差不多了,而且,你知道,网络工程师的工作环境普遍比较差,一般都要在机房里面调试设备,低频辐射对身体会有影响,而且这个职位需要东奔西走,是一个高不成低不就的职业爬到顶层的人需要付出的身体和时间的代价太大薪资待遇比软件工程师低很多

如果不是为了就业,只是为了证书的话,我建议考取跟本专业相关性大的专业证书,为什么呢如果专业跨度太大,会造成消耗的时间太多,以后又用不上

另外一个不利因素,现在计算机专业的学生特别的多,国家今年600多万的毕业生中计算机占了很大的比例,如果真的特别有兴趣,就刻苦钻研一下计算机程序设计课程,C,JAVA之前买一本

英语好的话,最好多去国外BBS上浏览,会有很多启发

考证的书籍,就五花八门了,别人觉得好的不一定都适合你,最好根据你所考的证书去书店里面亲自阅览,或者咨询计算机专业的老师让其为你推荐

作者 | 傅一平

来源 | 与数据同行

今天跟着我来学学数据仓库的基础知识,希望你结合案例可以把它吃透。

一、数据仓库建模的意义

如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置;如果把数据看作城市的建筑,我们希望城市规划布局合理;如果把数据看作电脑文件和文件夹,我们希望按照自己的习惯有很好的文件夹组织方式,而不是糟糕混乱的桌面,经常为找一个文件而不知所措。

数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据。Linux的创始人Torvalds有一段关于“什么才是优秀程序员”的话:“烂程序员关心的是代码,好程序员关心的是数据结构和它们之间的关系”,最能够说明数据模型的重要性。

只有数据模型将数据有序的组织和存储起来之后,大数据才能得到高性能、低成本、高效率、高质量的使用。

性能:帮助我们快速查询所需要的数据,减少数据的I/O吞吐,提高使用数据的效率,如宽表。

成本:极大地减少不必要的数据冗余,也能实现计算结果复用,极大地降低存储和计算成本。

效率:在业务或系统发生变化时,可以保持稳定或很容易扩展,提高数据稳定性和连续性。

质量:良好的数据模型能改善数据统计口径的不一致性,减少数据计算错误的可能性。数据模型能够促进业务与技术进行有效沟通,形成对主要业务定义和术语的统一认识,具有跨部门、中性的特征,可以表达和涵盖所有的业务。

大数据系统需要数据模型方法来帮助更好地组织和存储数据,以便在性能、成本、效率和质量之间取得最佳平衡!

下图是个示例,通过统一数据模型,屏蔽数据源变化对业务的影响,保证业务的稳定,表述了数据仓库模型的一种价值:

二、数据仓库分层的设计

为了实现以上的目的,数据仓库一般要进行分层的设计,其能带来五大好处:

清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。

数据血缘追踪:能够快速准确地定位到问题,并清楚它的危害范围。

减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。

把复杂问题简单化:将复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。当数据出现问题之后,不用修复所有的数据,只需要从有问题的步骤开始修复。

屏蔽原始数据的异常:不必改一次业务就需要重新接入数据。

以下是我们的一种分层设计方法,数据缓冲区(ODS)的数据结构与源系统完全一致。基础数据模型(DWD)和融合数据模型(DWI与DWA)是大数据平台重点建设的数据模型。应用层模型由各应用按需自行建设,其中基础数据模型一般采用ER模型,融合数据模型采用维度建模思路。

三、两种经典的数据仓库建模方法

前面的分层设计中你会发现有两种设计方法,关系建模和维度建模,下面分别简单介绍其特点和适用场景。

1、维度建模

(1)定义

维度模型是数据仓库领域另一位大师Ralph Kimball 所倡导的。维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能,更直接面向业务。

典型的代表是我们比较熟知的星形模型:

维度退化

星型模型由一个事实表和一组维表组成。每个维表都有一个维作为主键,所有这些维的主键组合成事实表的主键。强调的是对维度进行预处理,将多个维度集合到一个事实表,形成一个宽表。

这也是我们在使用hive时,经常会看到一些大宽表的原因,大宽表一般都是事实表,包含了维度关联的主键和一些度量信息,而维度表则是事实表里面维度的具体信息,使用时候一般通过join来组合数据,相对来说对OLAP的分析比较方便。

(2)建模方法

通常需要选择某个业务过程,然后围绕该过程建立模型,其一般采用自底向上的方法,从明确关键业务过程开始,再到明确粒度,再到明确维度,最后明确事实,非常简单易懂。

以下是阿里的OneData的建模工作流,可以参考。

(3)优缺点

优点:技术要求不高,快速上手,敏捷迭代,快速交付;更快速完成分析需求,较好的大规模复杂查询的响应性能

缺点:维度表的冗余会较多,视野狭窄

2、关系建模

(1)定义

是数据仓库之父Inmon推崇的、从全企业的高度设计一个3NF模型的方法,用实体加关系描述的数据模型描述企业业务架构,在范式理论上符合3NF,站在企业角度面向主题的抽象,而不是针对某个具体业务流程的实体对象关系抽象。

它更多是面向数据的整合和一致性治理,正如Inmon所希望达到的“single version of the truth”。

当有一个或多个维表没有直接连接到事实表上,而是通过其他维表连接到事实表上时,其图解就像多个雪花连接在一起,故称雪花模型。

雪花模型是对星型模型的扩展。它对星型模型的维表进一步层次化,原有的各维表可能被扩展为小的事实表,形成一些局部的 "层次 " 区域,这些被分解的表都连接到主维度表而不是事实表。

雪花模型更加符合数据库范式,减少数据冗余,但是在分析数据的时候, *** 作比较复杂,需要join的表比较多所以其性能并不一定比星型模型高。

(2)建模方法

关系建模常常需要全局考虑,要对上游业务系统的进行信息调研,以做到对其业务和数据的基本了解,要做到主题划分,让模型有清晰合理的实体关系体系,以下是方法的示意:

以下是中国移动的概念模型的一种示例,如果没有自顶向下的视野,基本是总结不出来的:

(3)优缺点

优点:规范性较好,冗余小,数据集成和数据一致性方面得到重视,比如运营商可以参考国际电信运营业务流程规范(ETOM),有所谓的最佳实践。

缺点:需要全面了解企业业务、数据和关系;实施周期非常长,成本昂贵;对建模人员的能力要求也非常高,容易烂尾。

3、建模方法比较

一般来讲,维度模型简单直观,适合业务模式快速变化的行业,关系模型实现复杂,适合业务模式比较成熟的行业,阿里原来用关系建模,现在基本都是维度建模的方式了。

运营商以前都是关系建模,现在其实边界越来越模糊,很多大数据业务变化很快,采用维度建模也比较方便,不需要顶层设计。

四、企业建模的三点经验

维度建模就不说了,只要能理解业务过程和其中涉及的相关数据、维度就可以,但自顶向下的关系建模难度很大,以下是关系建模的三个建设要点。

1、业务的理解:找到企业内最理解业务和源系统的人,梳理出现状,比如运营商就要深刻理解三域(O/B/M),概念建模的挑战就很大,现在做到B域的概念建模已经很不容易。

2、数据及关系的理解:各个域的系统建设的时候没有统一文档和规范,要梳理出逻辑模型不容易,比如运营商的事件主题下的逻辑模型就非常复杂。

3、标准化的推进:数据仓库建模的任何实体都需要标准化命名,否则未来的管理成本巨大,也是后续数据有效治理的基础,以下是我们的一个命名规范示例:

五、推荐三本书

总而言之,你可以把我的文章当成一个指引,具体还是要结合企业的实际去推进,但做事的时候要不忘建模的初心:即数据如何摆布才能提高支撑应用的效率,手段上不用区分什么先进不先进,好用就成。

以上就是关于为什么Web前端要学习JavaScript全部的内容,包括:为什么Web前端要学习JavaScript、软件工程试题!帮忙啊!急急急急急!、Java中Object类是最顶层的类等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9969672.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存