[大数据 100] CESI Dongya Wu:大数据标准与应用(高级教程)
【大数据100分】CESI吴东亚:大数据标准及应用〖大数据高级教程〗
主讲嘉宾:吴东亚
主持人:中关村大数据产业联盟 副秘书长陈新河
承办:中关村大数据产业联盟
吴东亚,中国电子技术标准化研究院信息技术研究中心标准总监。1972年生,籍贯黑龙江。1992年毕业于东南大学自动控制系毕业,1992-2001年,在中国空间技术研究院硕士学习、工作,参加“神舟一号”飞船地面测试系统研制工作,积累了一线科研和工程经验。2001-2004年,北京理工大学博士学习。2004至今,中国电子技术标准化研究院工作,期间到欧洲标准化机构留学。涉足电子信息技术领域国家/行业标准化、检测、认证、注册等各项工作,组织研制了数据管理、信息化、网络等领域多项国家/行业标准研制工作,推动我国自主研制的闪联(IGRS)、元模型互操作、物联网标识等技术成为国际标准。作为主笔专家,参与《新一代信息技术标准化指导意见》、《战略性新兴产业标准化规划》和《软件信息技术服务业“十二五”技术标准体系建设方案》等文件起草。现负责信息技术领域国内、国际标准化工作。
以下为分享实景全文:
中国电子技术标准化研究院系统地开展大数据标准化研究,大概有一年多的时间了,很高兴在这里和大家分享我们的一些想法。
首先我们看一下大家现在在大数据方面都在做什么
从国际上看,大数据方面的工作主要集中在以下4个方面:一是*层面,主要是提供政策导向,推动*数据、科学数据开放,为大数据发展提供政策支持和可信数据来源;二是研究机构利用*资金,开展科学数据、论文等开放数据集建设,并开展数据集间互操作方面的研究;三是Google等公司研制了分布式数据处理平台等产品,为大数据发展提供技术和产品支撑;四是标准化方面,目前最为实质性的是ISO/IEC JTC1成立了大数据研究组,由美国NIST牵头,NIST系统地开展了大数据架构、数据、安全需求等方面的研究,研究成果将贡献至JTC1。
从国内情况来看,多个地方*提出大力发展大数据的政策导向,在北京市率先开放了*数据资源;中国科学院计算机网络信息中心研发了科学数据库等开放数据集;阿里利用拥有的大量商业数据为基础,进行统计、分析和挖掘,对外提供数据服务;人民大学等研究院所和百度、阿里等公司正在开展大数据处理技术和平台研制工作;在标准化方面,全国信息技术标准化技术委员在充分调研基础上,提出了技术体系参考模型和标准体系框架,提出了术语、体系结构、数据表示、非结构化数据、数据质量、科学数据集等方面标准,其中多项标准已经立项。
从国际标准化角度上来看,最早开展工作的是ISO/IECJTC1/SC32(ISO/IEC 第一联合标准化技术委员会 第32分技术委员会)。
ISO/IEC JTC1 SC32 (数据管理和交换)分技术委员会,是与大数据关系最为密切相关的标准化组织。
SC32下设4个工作组和几个研究组,
WG1:电子业务
工作范围为:研制为达到各组织使用的信息系统间全球互操作所需的开放电子数据交换方面的通用IT标准,包括商务和信息技术两方面的互操作标准。
WG2:元数据
工作范围为:研制开发和维护有利于规范和管理的元数据、元模型和本体的标准,此类标准有助于理解和共享数据、信息和过程,支持互操作性,电子商务以及基于模型和基于服务的开发,
WG3:数据库语言
工作范围为:为动态规定、维护和描述多用户环境中的数据库结构和组件制定和维护语言标准;
WG4:SQL多媒体和应用包
工作范围为:规定各种应用领域使用的抽象数据类型包的定义。
JTC1/SC32是一个长期开展数据管理标准化研究的组织,大家熟悉的SQL语言、元数据等等标准都是这个组织研制的。
目前SC32还存在下一代分析技术与大数据研究组( SG Next Generation Analytics and Big Data)、云计算元数据研究组(SG Metadata for Cloud Computing)和基于事实基础的建模元模型研究组(SG Metamodel for Fact Based Modelling)等专项研究组,2年前,SC32针对大数据、社交网络、云计算等新兴领域,开展了相关的相关研究工作。后来,他们发现这个已经超过了SC32的范围。
ISO/IEC JTC1于2013年11月全会上新成立负责大数据国际标准化的研究组(ISO/IEC JTC1 SG2)。美国国家标准与技术研究院(NIST)专家Wo Chang担任召集人。
2014年ISO/IEC JTC1 SG2的工作重点包括:调研国际标准化组织(ISO)、国际电工委员会(IEC)、第1联合技术委员会(ISO/IEC JTC1)等在大数据领域的关键技术、参考模型以及用例等标准基础;确定大数据领域应用需要的术语与定义;评估分析当前大数据标准的具体需求,提出ISO/IEC JTC1大数据标准优先顺序;向2014 年ISO/IEC JTC1全会提交大数据建议的技术报告和其他研究成果。
这也是国际标准化组织对于新兴领域进行规划的常用方法。针对一些新兴领域,他们往往首先开始标准化预研,界定范围,例如云计算、物联网等领域,都是先预研,然后系统地开展标准化工作的。
大数据研究组的成立,标志着JTC 1统筹开展大数据的标准化工作,有利于大数据国际、国内标准化工作的开展。截至到目前,ISO/IEC JTC1 SG2于2014年计划召开三次会议,每次四天,前两天为成果交流展示,后两天为具体标准工作讨论。第一次会议于2014年3月18日至21日在美国圣地亚哥超级计算中心召开;第二次会议于2014年5月13日至16日在荷兰阿姆斯特丹大学召开。第三次会议计划于2014年6月在中国召开。
6月份的会议,正巧在北京召开。SC32全会、JTC1/WG2开放论坛“大数据标准化”、SG2 大数据研究组会议,都集中在今年6月份在北京召开。国际上大佬将齐聚北京。
ITU在2013年11月发布了题目为《大数据:今天巨大,明天平常》的技术观察报告,这个技术观察报告分析了大数据相关的应用实例,指出大数据的基本特征、促进大数据发展的技术,在报告的最后部分分析了大数据面临的挑战和ITU-T可能开展的标准化工作。在这份报告中,特别提及了NIST和JTC1/SC32正在开展的工作。
从ITU-T的角度来看,大数据发展面临的最大挑战包括:数据保护、隐私和网络安全;法律和法规的完善。根据ITU-T现有的工作基础,开展的标准化工作包括:高吞吐量、低延迟、安全、灵活和规模化的网络基础设施;汇聚数据机制和匿名;网络数据分析;垂直行业平台的互操作;多媒体分析;开放数据标准。ITU-T正在开展的工作中,与大数据最为密切相关的是已经提出了一项题目为“基于大数据的云计算的需求和能力”的新工作项目,将由中国、韩国和波兰的专家为主研制。
ITU-T是专门研制电信标准的国际标准化组织,重点针对大数据环境下如何提高网络的支持能力角度做了标准化研究。
这里要特别提到NIST的工作。NIST,即美国国家标准和技术研究院。NIST建立了大数据公共工作组(NBD-PWG),工作范围是建立来自于产业界、学术界和*的公共环境,共同形成达成共识的定义、术语、安全参考体系结构和技术路线图,提出数据分析技术应满足的互操作、可移植性、可用性和扩展性的需求和安全有效地支持的大数据应用的技术基础设,用于大数据相关方选择最佳的方案。
NBD-PWG是一个开放工作组,欢迎来自于产业界、学术界和*的各方面力量参与并贡献力量。原则上,工作组每周召开一次会议。工作组下设术语和定义、用例和需求、安全和隐私、参考体系结构和技术路线图5个分组,目前正在研制《大数据定义》、《大数据术语》、《大数据需求》、《大数据安全和隐私需求》、《大数据参考体系结构》和《大数据技术路线图》等输出物,均已经形成了初步版本。
下面说国内的情况。
全国信息技术标准化技术委员会(SAC/TC28,简称信标委)持续开展数据标准化工作,在元数据、数据库、数据建模、数据交换与管理等领域推动相关标准的研制与应用,为提升跨行业领域数据管理能力提供标准化支持。
信标委中与大数据关系比较密切的组织包括:信标委非结构化数据管理标准工作组、信标委云计算工作组、信标委SOA分技术委员会(筹)、信标委传感器网络工作组等。此外大数据安全部分的标准与全国信息安全标准化技术委员会密切相关。
信标委成立于1983年,是在国家标准化管理委员会和工业和信息化部的共同领导下,从事全国信息技术领域标准化工作的技术组织,负责对ISO/IEC JTC1(信息技术第一联合技术委员会)国际归口工作。
信标委是是全国最大的标准化技术委员会,信标委的工作范围是信息技术领域的标准化,涉及信息采集、表示、处理、传输、交换、描述、管理、组织、存储、检索及其技术,系统与产品的设计、研制、管理、测试及相关工具的开发等的标准化工作。标准范围涵盖词汇、编码字符集和字型、数据通信、软件和系统工程、卡和身份识别、程序设计语言、图形图像表示、信息技术设备、多媒体、自动识别和数据采集技术、数据管理、文件描述与处理语言、用户接口、信息技术教育、生物特征识别、分布应用平台与服务、信息技术可持续发展等领域。信息技术领域的标准,几乎都是这个组织研制的。
信标委于2012年成立了非结构化数据管理标准工作组,对口ISO/IEC JTC1 SC32 WG4。非机构化数据管理标准工作组联合产、学、研、用等力量,致力于制定非结构化数据管理体系结构、数据模型、查询语言、数据挖掘、信息集成、信息提取、应用模式等相关国家标准和行业标准。目前正在开展《非结构化数据表示规范》、《非结构化数据访问接口规范》、《非结构化数据管理系统技术要求》等国家标准研制。
信标委的云计算标准工作组目前正在开展大数据存储和分析应用的研究工作,旨在研究大数据存储和分析技术的应用分析、技术框架和标准研究等。同时,正在组织编制《云数据存储和管理》系列国家标准,为推动大数据存储和分析标准研究奠定了基础。
全国信标委的SOA分技术委员会(筹)(以下简称“SOA分委会”)负责面向服务的体系结构(SOA)、Web服务和中间件的专业标准化的技术归口工作,并协助全国信息技术标准化技术委员会承担国际标准化组织相应分技术委员会的国内归口工作,现有成员108家。SOA分委会还同时负责推动软件构件、云计算技术、智慧城市领域的标准化工作。2013年7月5日,SOA分委会全会上决定在基础工作组内启动大数据预研项目,目前正在征集成员阶段;2013年7月22日开展了《大数据应用、技术、产业与标准化调研》,作为下一步大数据标准化研究的基础;此外,SOA分委会智慧城市应用工作组在推动智慧城市中大数据的应用和服务化的标准研究 。
全国信息安全标准化委员会(TC260)是在信息安全技术专业领域内,从事信息安全标准化工作的技术工作组织。 委员会负责组织开展国内信息安全有关的标准化技术工作,技术委员会主要工作范围包括:安全技术、安全机制、安全服务、安全管理、安全评估等领域的标准化技术工作。全国信安标委目前正开展大数据安全技术、产业和标准研究,为大数据的安全保障提供支撑。
前面说完现状,下面我们说说我们对于大数据目前阶段的理解。
从大数据与相关技术的关联关系上来看,互联网、物联网、云计算等技术的发展为大数据提供了基础,互联网、物联网提供了大量数据来源;云计算的分布式存储和计算能力提供了技术支撑;而大数据的核心是数据处理。其中传统的数据处理技术经过演进依然有效,新兴技术还在不断探索和发展中。
大家经常在说大数据和传统数据管理的关系,我们认为是个技术演进的过程,原来的一些技术还是适用的,需要根据新情况不断发展
从大数据商业模式上来看,大数据时代,不断涌现出围绕大数据、利用大数据的的新产品形态、新业务模式。其中,“数据租售”即通过出售原始的业务数据或者是经过初步处理分析的数据来获取直接的利益,以商品化的数据应用创造了新的商业模式。百度游戏通过搜集整理网络游戏用户的搜索需求和搜索热点,建立完备的用户行为数据库,提供给上游的游戏运营商创造数据服务的收入来源,成为在搜索引擎领域中将以数据支持服务变为主要盈利模式的成功案例。阿里巴巴正在研发的数据仓库,以阿里巴巴拥有的大量商业数据为基础,进行统计、分析和挖掘,形成规范的实体明细数据和指标数据,对外服务。其中, “魔方”是淘宝网成立的专门用于提供数据服务的机构,为商家提供行业分析数据,从中获取利益。此外,科学机构、*机构提供的数据集也成为可信的重要数据来源。
大数据的发展目前急需解决三方面的问题:一是提供处理大数据能力的技术和平台;二是需要明确大数据生态环境中的各个角色的权利、义务,解决数据开放和共享过程中的产权保护、权限管理和隐私保护等问题;三是需要建立可管理维护、可信、易于互操作的数据资源集,这是大数据发展的初步成果,为大数据处理、应用和进一步发展提供基础,也是我国的重要信息资源。其中第一个问题是技术问题,后面两个问题既是技术问题,也是管理问题。
这是我们针对大数据的各个方面,比较认可的一个技术参考模型。
大数据技术参考模型表示了通用的、技术无关的大数据系统的逻辑功能模块以及模块之间的互操作接口(如:服务)。这些被称为“提供者”的模块代表了大数据生态系统中的功能角色,表明他们提供或实施大数据系统中特定技术的功能。
大数据技术参考模型基于代表大数据价值链的两个维度组成:信息流(垂直维)和IT集成(水平维)。在信息流维度上,价值通过数据采集、集成、分析、使用结果来实现。在IT维度上,价值通过为大数据应用的实施提供拥有或运行大数据的网络、基础设施、平台、应用工具以及其他IT服务来实现。大数据处理提供者模块是在两个维的交叉点上,表明大数据分析和其实施是为两个价值链上大数据利益相关者提供的特定价值。
五个主要的架构模块代表在每个大数据系统中存在的不同技术角色:数据提供者、数据消费者、大数据处理提供者、大数据框架提供者、系统协调者。另外两个架构模块是安全隐私和管理,代表能为大数据系统其他模块提供服务和功能的构件。这两个关键功能极其重要,因此也被集成在任何大数据解决方案中。
此架构可以用于多个大数据系统组成的复杂系统,这样其中一个系统的大数据使用者可以作为另外一个系统的大数据提供者。
我们对于现有标准进行分析,梳理出了标准体系。包括71项标准,44项急需研制的标准。
a)基础标准
为整个标准体系提供包括总则、术语和参考架构等基础性标准,为标准体系的研究建立基础。并为未来标准建设提供指导。
b)数据处理标准
数据处理类标准包含数据整理、数据分析和数据访问三种类型的标准。
数据整理标准主要是针对数据在采集汇聚后的初步处理方式、方法的标准,包括数据表示、数据注册和数据清理三类标准。数据分析标准主要针对大数据环境下数据分析的性能、功能等要求进行规范。数据可视化则是对数据产生的过程以及数据分析的结果进行标准化的可视化展现,主要是采用现有技术标准。而数据访问标准则是提供标准化的接口和共享方式,数据能够被广泛的应用。
c)数据安全标准
数据安全作为数据标准的支撑体系,贯穿于数据整个生命周期的各个阶段。抛开传统的网络安全和系统安全之外,针对在大数据时代下的数据安全标准化主要包括通用要求、隐私保护两类标准。
d)数据质量标准
该类标准主要针对数据质量提出具体的管理要求和相应的指标要求,确保数据在产生、存储、交换和使用等各个环节中的质量,为大数据应用打下良好的基础。并对数据全生命周期尽情规范化管理。主要包括元数据质量、质量评价和数据溯源三类标准。
e)产品和平台标准
该类标准主要针对大数据相关技术产品和应用平台进行规范。包括关系型数据库产品、非结构化数据管理产品、可视化工具、开放数据集、数据处理平台和数据服务平台六类标准。其中关系型数据库产品标准针对存储和处理大数据的关系型数据库管理系统进行标准化,涉及访问接口、技术要求、测试要求等内容,为关系型数据库管理系统进行大数据的高端事务处理和海量数据分析提供支持;非结构化数据管理产品标准针对存储和处理大数据的非结构化数据管理系统,从参考架构、数据表示、访问接口、技术要求、测试要求等方面进行规范;可视化工具是针对大数据处理应用过程中所需用到的可视化展现工具的技术和功能要求进行规范;数据处理平台标准是针对大数据处理的平台的技术架构、建设方案、平台接口等方面进行规范。
f)应用和服务标准
应用和服务类标准主要是针对大数据所能提供的应用和服务进行技术、功能、开发、维护和管理等方面进行规范。主要包括开放数据集和数据服务平台两类标准。其中开放数据集标准主要针对向第三方提供的开放数据包中内容、格式等要求进行规范;数据数据服务平台标准是针对大数据服务平台所提出的功能性、维护性和管理性的标准。
与以前的信息技术不同,大数据提出了“数据是一种产品”的概念。因此我们特别加上了应用和服务标准。我们首先没有特别关注行业应用数据标准,因为这个有很强的行业背景,不是目前能够做的。在这部分,我们建议集中在通用的数据集、数据服务平台两方面。还有详细的标准清单,我就不介绍了。
我们是上周专门召开了”大数据标准化白皮书“的会议,20多家单位、40多位专家参加了会议,提出了很多宝贵意见。我们会尽快完善后,和大家分享我们的阶段性成果。
通过对现有各类标准情况进行分析可以看出:
(1) 从技术标准上来看,大数据相关的技术标准具有一定的工作基础。在数据整理方面,我国已经研制的一些相关标准,同样适用于大数据环境,目前急需加强这类标准的推广应用;数据分析是大数据的特点和难点,标准较为缺乏;在数据访问方面,目前在研多项数据库、云数据存储和管理类标准,适用于大数据底层数据接口,但是尚缺乏数据导入、导出类标准;数据安全方面,部分现有标准适用,但是尚缺乏针对大数据的安全框架、隐私、访问控制类标准;数据质量是大数据应用和发展的基础,目前有多项在研标准,但是均尚未发布,较为缺乏;
(2) 针对大数据产品和平台,目前在研多项数据库、非结构化数据管理产品类标准,尚无针对大数据可视化工具、数据处理平台的标准;在大数据环境下,数据也成为产品,而针对开放数据集、数据服务平台等新兴产品和服务形态,尚缺乏相应的标准。
综上所述,针对大数据,我国在数据管理、云计算、信息安全等方面,已经发布和在研一些标准,适用于大数据环境,提供了一定的基础,但是缺乏标准化整体规划;数据分析、数据安全、数据质量管理等技术标准,数据处理平台、开放数据集、数据服务平台类新型产品和服务形态的标准较为缺乏,急需研制。
这是我们对于标准梳理的一些分析。不成熟,还需要完善。
互动内容:
Q1 Bright Star:@吴东亚:谢谢!请问IEEE和国内的CCSA有没有在做相应的工作?如果没有,为何?谢谢!
吴东亚:IEEE我们没有系统跟踪,所以说的不一定很全。IEEE比较活跃的大概有几块,网络,无线局域网啥的,教育,软件,这几块,其实和ISO/IEC都有很强的密切关系。很多IEEE在这些领域的标准直接采用为ISO/IEC的标准。但是,在ISO/IEC JTC1/SC32这个最为专业做数据标准化的组织中,IEEE并没有参与过。所以,我认为可能是IEEE在这方面可能集中在研究,并没有专门做相关标准。
吴东亚:CCSA的情况不是特别了解。从背景上来说,CCSA主要侧重于通信以及相关领域,以前直接做数据的并不多。ITU-T目前只是做了一份技术观察报告,因为ITU-T原来的组织设置上,并没有直接做数据管理标准的,可能有这个关系。毕竟标准化组织工作,是有连续性的。
张存勇:我认为,高层应用的模型、算法、工具很成熟的经典可当成标准,还会有层出不穷的新模型算法不知是否精准,不急着建标准吧。大数据的元数据采集标准应该是迫在眉睫的。
吴东亚:其实算法,基本上不会直接做标准。标准,不会依附于具体实现,国际国内都是这个情况。元数据,确实十分重要这也是我为什么谈技术是演进的原因。这个系列标准,都是ISO/IEC JTC1/SC32研制的,影响力很大很大。5年前,大家认为这些标准过于理想化,理论化,不知道元数据是什么,现在重要的是这些标准的应用层面。
吴东亚:当然,元数据采集或者应用是有很强的应用背景的。其实,所有做数据的系统,等等,都是依据ISO/IEC 11179系统标准。我们认为,中国首先可能做起来的是科学,企业,地方*的等领域。部委级的,尤其是各部委之间能够达成共识的元数据,还需要时间,这是中国国情。
吴东亚:非结构化数据,要处理,第一步就是结构化,说白了,就去提取关键特征,提取元数据。
Q2张存勇:@吴东亚听说过标码系统标准吗?据说ITU在推,基于IPV6体系的,主要是IPV6地址和设备结合的唯一标识码系统,用于全球物联网统一标识。
张存勇:据说标码系统来源于Kindle图书分类标准。
张存勇:@吴东亚标识太重要了,接触过标码组织的专家,感觉好像很重要。
吴东亚:物联网标识有很多类,不同层面的,不能搅合在一起谈。IPv6不是直接解决物联网的,虽然需要用到。大数据发展,也需要解决统一标识的问题,大数据真正应用,也需要首先解决数据标识问题。国外已经在做。目前国外的一些联盟机构,已经对世界范围的各种信息资源(针对数字出版物的DOI、针对数字视听产品的ISAN)进行统一注册管理,并在世界范围内寻找代理机构,以实现对世界范围内信息资源的管理和控制。网络等基础设施安全也就这样了,如果数据层面,再被国际控制,就是全裸了。大数据更是这个样子,这个层面的标识,数据表示啊,啥的,可是要小心设计呢。关于标识方面,我们还是做了研究的,应该说,我们是这方面很专业的团队。数据的标识等,需要我们自己管理,这样才能安全地大规模应用。
张存勇:没错,我们也感觉,ID标识必须自己掌握,主标识不变,但里边的内容要更新,也就是动态标识体系,必须控制在自己人手里,涉及到将来的数字国防领域。
吴东亚:说到物联网统一标识,再说一下。我们、卫生部信息中心、农业信息中心、交通公路院、中兴等等20多家单位,合作提出的《OID在物联网中应用指南》的标准,今年1月份在ITU正式立项。这是中国提出的第一个物联网标识方面的国际标准立项,很不容易。
北京海泰方圆的柳晶:我们公司是做电子文件管理、大数据环境下非结构化内容管理的。初来报道,听了吴博士和大家的发言很受启发。我想提提个问题:目前国际国内对于数据本身价值鉴定的方法和规则有没有一些标准或做法。以便不同价值等级的数据采取相应合理的存储、处理、保护、分析等手段。谢谢!
吴东亚:关于数据质量,目前,软件工程软件产品质量要求和评价(SQuaRE)数据质量模型。有这个国际标准,但是还没有转化为国家标准,我印象中,在工业控制领域,大概有几个数据质量的标准。关于不同价值等级的数据采取相应合理的存储、处理、保护、分析等手段。我了解目前是没有的,倒是有关于数据长期保存方面的研究。如果贵公司在这方面,有技术积累,愿意贡献出来,我们可以探讨,是否可以做成标准
陈新河:工业社会的标准、质量、管理体系,都是经过几百年的沉淀,信息社会即使早的说从1970年开始,也才不到半个世纪,所以其质量、标准的完善也需要一个相当漫长的过程。
吴东亚:目前的阶段,我觉得不要说大数据,即使是小数据,还有很多问题都没有解决。比方说,元数据,这第一步,都还没有实现。和基础设施层面,已经完全标准化的状态,还是不一样的。同意主持人的说法,质量、管理体系,基本上是老牌资本主义国家英国建立起来的,包括认证,都是英国先开的。制造方面的,严谨的德国人做了很多贡献,信息技术方面,美国的贡献最大。我们国家在部分新兴领域,物联网、云计算等等,大家都还有些晕的情况下,能后和国际上一起探讨。
陈新河:德国的系统,日本的质量,美国的软件,这个好像是20年前IBM总结的,目前看仍是如此!
Q3吴东亚:中关村大数据产业联盟推动的数据交易平台怎么样了?
陈新河:数据交易平台,应该说有一点进步,昨天上午还到交通部信息信息中心谈如何推动数据开放、合理定价和数据交易。目前我看到的在企业之间的数据交易已经初具规模,大的平台有几千万的收入了,京东、新浪微博等也在积极推进数据交易,每年谷歌从推特上购买的数据的费用有3000多万美元。整体来看企业数据交易进行的比想象的要好,反而是*的数据交易做的差强人意。
吴东亚:希望,后续,在这部分,我们可以一起探讨标准研制
陈新河:把标准讲的能吸引到如此多人提问题还是第一次,足见吴博士的功力。也希望通过这个平台更多的企业产业标准制定中来。
吴东亚:好的,也找到我们进一步合作的结合点。
Q4董健:关于非结构化数据,我有不同的观点,现在很多做法都是把非结构化数据提取转化成结构化数据,放到数据仓库里,进行利用,其实有的时候非结构化数据是不应该转换的或者价值是不可转换的,数据分析和挖掘应该就在非结构化数据的基础上完成,一旦提炼,数据本身的场景就消失了。必须基于混搭的结构化和非结构化数据进行价值发掘。当然非结构化数据的范畴是模糊的,有人说语音图像视频这样,其实有的时候那种网状的星形的数据关系都可以看作是非结构化的。数据价值的挖掘只要是信息能够数据化,就应该直接处理。其实数据有一个数据流的概念,数据的产生都是在工作流中完成的,那么这个工作流其实就是数据的一部分,也就是数据的上下文,但很多时候数据被提炼以后这些场景信息都消失了,这时候数据的含义也就变化了。跟刚才说的非结构化数据提炼是一个意思。
吴东亚:部分同意这份专家意见,其实我也对非结构化这么处理比较疑惑,丢失信息为代价的。
Q5张存勇:@吴东亚是否只要我们搞好了自己的物联网统一标识体系并采用了,一旦对大数据体系里的某个物联网设备进行配置变动,全网的有关部分都会自动应对,减少相应维护更新成本?
吴东亚:标识体系包括很多方面,编号规则,管理程序,数据标识,解析系统。大家说的,往往只是编号规则,其实是不完全的。标识体系,只能解决找到的问题,至于说您提到的要求,要看具体设计方案了。标识,首先解决的是找到对象的问题。
C陈新河,联盟副秘书长;《软件定义世界,数据驱动未来》@吴东亚 再次感谢吴博士的精彩分享!
原文发布时间为:2014-04-07
本文来自云栖社区合作伙伴“大数据文摘”,了解相关信息可以关注“BigDataDigest”微信公众号
上一篇: 希望之潮 - 东南名胜 - 宋柳永
下一篇: 望海--东南风光欣赏
推荐阅读
-
SSM三大框架基础面试题-一、Spring篇 什么是Spring框架? Spring是一种轻量级框架,提高开发人员的开发效率以及系统的可维护性。 我们一般说的Spring框架就是Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发。这些模块是核心容器、数据访问/集成、Web、AOP(面向切面编程)、工具、消息和测试模块。比如Core Container中的Core组件是Spring所有组件的核心,Beans组件和Context组件是实现IOC和DI的基础,AOP组件用来实现面向切面编程。 Spring的6个特征: 核心技术:依赖注入(DI),AOP,事件(Events),资源,i18n,验证,数据绑定,类型转换,SpEL。 测试:模拟对象,TestContext框架,Spring MVC测试,WebTestClient。 数据访问:事务,DAO支持,JDBC,ORM,编组XML。 Web支持:Spring MVC和Spring WebFlux Web框架。 集成:远程处理,JMS,JCA,JMX,电子邮件,任务,调度,缓存。 语言:Kotlin,Groovy,动态语言。 列举一些重要的Spring模块? Spring Core:核心,可以说Spring其他所有的功能都依赖于该类库。主要提供IOC和DI功能。 Spring Aspects:该模块为与AspectJ的集成提供支持。 Spring AOP:提供面向切面的编程实现。 Spring JDBC:Java数据库连接。 Spring JMS:Java消息服务。 Spring ORM:用于支持Hibernate等ORM工具。 Spring Web:为创建Web应用程序提供支持。 Spring Test:提供了对JUnit和TestNG测试的支持。 谈谈自己对于Spring IOC和AOP的理解 IOC(Inversion Of Controll,控制反转)是一种设计思想: 在程序中手动创建对象的控制权,交由给Spring框架来管理。IOC在其他语言中也有应用,并非Spring特有。IOC容器实际上就是一个Map(key, value),Map中存放的是各种对象。 将对象之间的相互依赖关系交给IOC容器来管理,并由IOC容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。IOC容器就像是一个工厂一样,当我们需要创建一个对象的时候,只需要配置好配置文件/注解即可,完全不用考虑对象是如何被创建出来的。在实际项目中一个Service类可能由几百甚至上千个类作为它的底层,假如我们需要实例化这个Service,可能要每次都搞清楚这个Service所有底层类的构造函数,这可能会把人逼疯。如果利用IOC的话,你只需要配置好,然后在需要的地方引用就行了,大大增加了项目的可维护性且降低了开发难度。 Spring中的bean的作用域有哪些? 1.singleton:该bean实例为单例 2.prototype:每次请求都会创建一个新的bean实例(多例)。 3.request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。 4.session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。 5.global-session:全局session作用域,仅仅在基于Portlet的Web应用中才有意义,Spring5中已经没有了。Portlet是能够生成语义代码(例如HTML)片段的小型Java Web插件。它们基于Portlet容器,可以像Servlet一样处理HTTP请求。但是与Servlet不同,每个Portlet都有不同的会话。 Spring中的单例bean的线程安全问题了解吗? 概念用于理解:大部分时候我们并没有在系统中使用多线程,所以很少有人会关注这个问题。单例bean存在线程问题,主要是因为当多个线程操作同一个对象的时候,对这个对象的非静态成员变量的写操作会存在线程安全问题。 有两种常见的解决方案(用于回答的点): 1.在bean对象中尽量避免定义可变的成员变量(不太现实)。 2.在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal(线程本地化对象)中(推荐的一种方式)。 ThreadLocal解决多线程变量共享问题(参考博客):https://segmentfault.com/a/1190000009236777 Spring中Bean的生命周期: 1.Bean容器找到配置文件中Spring Bean的定义。 2.Bean容器利用Java Reflection API创建一个Bean的实例。 3.如果涉及到一些属性值,利用set方法设置一些属性值。 4.如果Bean实现了BeanNameAware接口,调用setBeanName方法,传入Bean的名字。 5.如果Bean实现了BeanClassLoaderAware接口,调用setBeanClassLoader方法,传入ClassLoader对象的实例。 6.如果Bean实现了BeanFactoryAware接口,调用setBeanClassFacotory方法,传入ClassLoader对象的实例。 7.与上面的类似,如果实现了其他*Aware接口,就调用相应的方法。 8.如果有和加载这个Bean的Spring容器相关的BeanPostProcessor对象,执postProcessBeforeInitialization方法。 9.如果Bean实现了InitializingBean接口,执行afeterPropertiesSet方法。 10.如果Bean在配置文件中的定义包含init-method属性,执行指定的方法。 11.如果有和加载这个Bean的Spring容器相关的BeanPostProcess对象,执行postProcessAfterInitialization方法。 12.当要销毁Bean的时候,如果Bean实现了DisposableBean接口,执行destroy方法。 13.当要销毁Bean的时候,如果Bean在配置文件中的定义包含destroy-method属性,执行指定的方法。 Spring框架中用到了哪些设计模式? 1.工厂设计模式:Spring使用工厂模式通过BeanFactory和ApplicationContext创建bean对象。 2.代理设计模式:Spring AOP功能的实现。 3.单例设计模式:Spring中的bean默认都是单例的。 4.模板方法模式:Spring中的jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模板模式。 5.包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要会去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。 6.观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用。 7.适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、Spring MVC中也是用到了适配器模式适配Controller。 还有很多。。。。。。。 @Component和@Bean的区别是什么 1.作用对象不同。@Component注解作用于类,而@Bean注解作用于方法。 2.@Component注解通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径)。@Bean注解通常是在标有该注解的方法中定义产生这个bean,告诉Spring这是某个类的实例,当我需要用它的时候还给我。 3.@Bean注解比@Component注解的自定义性更强,而且很多地方只能通过@Bean注解来注册bean。比如当引用第三方库的类需要装配到Spring容器的时候,就只能通过@Bean注解来实现。 @Configuration public class AppConfig { @Bean public TransferService transferService { return new TransferServiceImpl; } } <beans> <bean id="transferService" class="com.kk.TransferServiceImpl"/> </beans> @Bean public OneService getService(status) { case (status) { when 1: return new serviceImpl1; when 2: return new serviceImpl2; when 3: return new serviceImpl3; } } 将一个类声明为Spring的bean的注解有哪些? 声明bean的注解: @Component 组件,没有明确的角色 @Service 在业务逻辑层使用(service层) @Repository 在数据访问层使用(dao层) @Controller 在展现层使用,控制器的声明 注入bean的注解: @Autowired:由Spring提供 @Inject:由JSR-330提供 @Resource:由JSR-250提供 *扩:JSR 是 java 规范标准 Spring事务管理的方式有几种? 1.编程式事务:在代码中硬编码(不推荐使用)。 2.声明式事务:在配置文件中配置(推荐使用),分为基于XML的声明式事务和基于注解的声明式事务。 Spring事务中的隔离级别有哪几种? 在TransactionDefinition接口中定义了五个表示隔离级别的常量:ISOLATION_DEFAULT:使用后端数据库默认的隔离级别,Mysql默认采用的REPEATABLE_READ隔离级别;Oracle默认采用的READ_COMMITTED隔离级别。ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。ISOLATION_READ_COMMITTED:允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。 Spring事务中有哪几种事务传播行为? 在TransactionDefinition接口中定义了八个表示事务传播行为的常量。 支持当前事务的情况:PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)。 不支持当前事务的情况:PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。 其他情况:PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于PROPAGATION_REQUIRED。 二、SpringMVC篇 什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 Spring MVC的工作原理了解嘛? image.png Springmvc的优点: (1)可以支持各种视图技术,而不仅仅局限于JSP; (2)与Spring框架集成(如IoC容器、AOP等); (3)清晰的角色分配:前端控制器(dispatcherServlet) , 请求到处理器映射(handlerMapping), 处理器适配器(HandlerAdapter), 视图解析器(ViewResolver)。 (4) 支持各种请求资源的映射策略。 Spring MVC的主要组件? (1)前端控制器 DispatcherServlet(不需要程序员开发) 作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。 (2)处理器映射器HandlerMapping(不需要程序员开发) 作用:根据请求的URL来查找Handler (3)处理器适配器HandlerAdapter 注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。 (4)处理器Handler(需要程序员开发) (5)视图解析器 ViewResolver(不需要程序员开发) 作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view) (6)视图View(需要程序员开发jsp) View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等) springMVC和struts2的区别有哪些? (1)springmvc的入口是一个servlet即前端控制器(DispatchServlet),而struts2入口是一个filter过虑器(StrutsPrepareAndExecuteFilter)。 (2)springmvc是基于方法开发(一个url对应一个方法),请求参数传递到方法的形参,可以设计为单例或多例(建议单例),struts2是基于类开发,传递参数是通过类的属性,只能设计为多例。 (3)Struts采用值栈存储请求和响应的数据,通过OGNL存取数据,springmvc通过参数解析器是将request请求内容解析,并给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过reques域传输到页面。Jsp视图解析器默认使用jstl。 SpringMVC怎么样设定重定向和转发的? (1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4" (2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com" SpringMvc怎么和AJAX相互调用的? 通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 : (1)加入Jackson.jar (2)在配置文件中配置json的映射 (3)在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。 如何解决POST请求中文乱码问题,GET的又如何处理呢? (1)解决post请求乱码问题: 在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8; <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> (2)get请求中文参数出现乱码解决方法有两个: ①修改tomcat配置文件添加编码与工程编码一致,如下: <ConnectorURIEncoding="utf-8" connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/> ②另外一种方法对参数进行重新编码: String userName = new String(request.getParamter("userName").getBytes("ISO8859-1"),"utf-8") ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。 Spring MVC的异常处理 ? 统一异常处理: Spring MVC处理异常有3种方式: (1)使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver; (2)实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器; (3)使用@ExceptionHandler注解实现异常处理; 统一异常处理的博客:https://blog.csdn.net/ctwy291314/article/details/81983103 SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决? 是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写成员变量。(此题目类似于上面Spring 中 第5题 有两种解决方案) SpringMVC常用的注解有哪些? @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。 @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。 @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。 SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代? 一般用@Controller注解,也可以使用@RestController,@RestController注解相当于@ResponseBody + @Controller,表示是表现层,除此之外,一般不用别的注解代替。 如果在拦截请求中,我想拦截get方式提交的方法,怎么配置? 可以在@RequestMapping注解里面加上method=RequestMethod.GET。 怎样在方法里面得到Request,或者Session? 直接在方法的形参中声明request,SpringMVC就自动把request对象传入。 如果想在拦截的方法里面得到从前台传入的参数,怎么得到? 直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样。 如果前台有很多个参数传入,并且这些参数都是一个对象的,那么怎么样快速得到这个对象? 直接在方法中声明这个对象,SpringMVC就自动会把属性赋值到这个对象里面。 SpringMVC中函数的返回值是什么? 返回值可以有很多类型,有String, ModelAndView。ModelAndView类把视图和数据都合并的一起的。 SpringMVC用什么对象从后台向前台传递数据的? 通过ModelMap对象,可以在这个对象里面调用put方法,把对象加到里面,前台就可以拿到数据。 怎么样把ModelMap里面的数据放入Session里面? 可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key。 SpringMvc里面拦截器是怎么写的: 有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可: <!-- 配置SpringMvc的拦截器 --> <mvc:interceptors> <!-- 配置一个拦截器的Bean就可以了 默认是对所有请求都拦截 --> <bean id="myInterceptor" class="com.zwp.action.MyHandlerInterceptor"></bean> <!-- 只针对部分请求拦截 --> <mvc:interceptor> <mvc:mapping path="/modelMap.do" /> <bean class="com.zwp.action.MyHandlerInterceptorAdapter" /> </mvc:interceptor> </mvc:interceptors> 注解原理: 注解本质是一个继承了Annotation的特殊接口,其具体实现类是Java运行时生成的动态代理类。我们通过反射获取注解时,返回的是Java运行时生成的动态代理对象。通过代理对象调用自定义注解的方法,会最终调用AnnotationInvocationHandler的invoke方法。该方法会从memberValues这个Map中索引出对应的值。而memberValues的来源是Java常量池 三、Mybatis篇 什么是MyBatis? MyBatis是一个可以自定义SQL、存储过程和高级映射的持久层框架。 讲下MyBatis的缓存 MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有, 二级缓存放在它的命名空间里,默认是不打开的,使用二级缓存属性类需要实现Serializable序列化接口, 可在它的映射文件中配置<cache/> Mybatis是如何进行分页的?分页插件的原理是什么? 1)Mybatis使用RowBounds对象进行分页,也可以直接编写sql实现分页,也可以使用Mybatis的分页插件。 2)分页插件的原理:实现Mybatis提供的接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql。 举例:select * from student,拦截sql后重写为:select t.* from (select * from student)t limit 0,10 简述Mybatis的插件运行原理,以及如何编写一个插件? 1)Mybatis仅可以编写针对ParameterHandler、ResultSetHandler、StatementHandler、 Executor这4种接口的插件,Mybatis通过动态代理, 为需要拦截的接口生成代理对象以实现接口方法拦截功能, 每当执行这4种接口对象的方法时,就会进入拦截方法, 具体就是InvocationHandler的invoke方法,当然, 只会拦截那些你指定需要拦截的方法。 2)实现Mybatis的Interceptor接口并复写intercept方法, 然后在给插件编写注解,指定要拦截哪一个接口的哪些方法即可, 记住,别忘了在配置文件中配置你编写的插件。 Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不? 1)Mybatis动态sql可以让我们在Xml映射文件内, 以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能。 2)Mybatis提供了9种动态sql标签:trim|where|set|foreach|if|choose|when|otherwise|bind。 3)其执行原理为,使用OGNL从sql参数对象中计算表达式的值, 根据表达式的值动态拼接sql,以此来完成动态sql的功能。 #{}和${}的区别是什么? 1)#{}是预编译处理,${}是字符串替换。 2)Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值(有效的防止SQL注入); 3)Mybatis在处理${}时,就是把${}替换成变量的值。 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? Hibernate属于全自动ORM映射工具, 使用Hibernate查询关联对象或者关联集合对象时, 可以根据对象关系模型直接获取,所以它是全自动的。 而Mybatis在查询关联对象或关联集合对象时, 需要手动编写sql来完成,所以,称之为半自动ORM映射工具。 Mybatis是否支持延迟加载?如果支持,它的实现原理是什么? 1)Mybatis仅支持association关联对象和collection关联集合对象的延迟加载, association指的就是一对一,collection指的就是一对多查询。 在Mybatis配置文件中, 可以配置是否启用延迟加载lazyLoadingEnabled=true|false。 2)它的原理是,使用CGLIB创建目标对象的代理对象, 当调用目标方法时,进入拦截器方法, 比如调用a.getB.getName, 拦截器invoke方法发现a.getB是null值, 那么就会单独发送事先保存好的查询关联B对象的sql, 把B查询上来,然后调用a.setB(b), 于是a的对象b属性就有值了, 接着完成a.getB.getName方法的调用。 这就是延迟加载的基本原理。 MyBatis与Hibernate有哪些不同? 1)Mybatis和hibernate不同,它不完全是一个ORM框架, 因为MyBatis需要程序员自己编写Sql语句, 不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句, 并将java对象和sql语句映射生成最终执行的sql, 最后将sql执行的结果再映射生成java对象。 2)Mybatis学习门槛低,简单易学,程序员直接编写原生态sql, 可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发, 例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁, 一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性, 如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。 3)Hibernate对象/关系映射能力强,数据库无关性好, 对于关系模型要求高的软件(例如需求固定的定制化软件) 如果用hibernate开发可以节省很多代码,提高效率。 但是Hibernate的缺点是学习门槛高,要精通门槛更高, 而且怎么设计O/R映射,在性能和对象模型之间如何权衡, 以及怎样用好Hibernate需要具有很强的经验和能力才行。 总之,按照用户的需求在有限的资源环境下只要能做出维护性、 扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。 MyBatis的好处是什么? 1)MyBatis把sql语句从Java源程序中独立出来,放在单独的XML文件中编写, 给程序的维护带来了很大便利。 2)MyBatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象, 大大简化了Java数据库编程的重复工作。 3)因为MyBatis需要程序员自己去编写sql语句, 程序员可以结合数据库自身的特点灵活控制sql语句, 因此能够实现比Hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。 简述Mybatis的Xml映射文件和Mybatis内部数据结构之间的映射关系? Mybatis将所有Xml配置信息都封装到All-In-One重量级对象Configuration内部。 在Xml映射文件中,<parameterMap>标签会被解析为ParameterMap对象, 其每个子元素会被解析为ParameterMapping对象。 <resultMap>标签会被解析为ResultMap对象, 其每个子元素会被解析为ResultMapping对象。 每一个<select>、<insert>、<update>、<delete> 标签均会被解析为MappedStatement对象, 标签内的sql会被解析为BoundSql对象。 什么是MyBatis的接口绑定,有什么好处? 接口映射就是在MyBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定, 我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置. 接口绑定有几种实现方式,分别是怎么实现的? 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加 上@Select@Update等注解里面包含Sql语句来绑定, 另外一种就是通过xml里面写SQL来绑定,在这种情况下, 要指定xml映射文件里面的namespace必须为接口的全路径名. 什么情况下用注解绑定,什么情况下用xml绑定? 当Sql语句比较简单时候,用注解绑定;当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多 MyBatis实现一对一有几种方式?具体怎么操作的? 有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次, 通过在resultMap里面配置association节点配置一对一的类就可以完成; 嵌套查询是先查一个表,根据这个表里面的结果的外键id, 去再另外一个表里面查询数据,也是通过association配置, 但另外一个表的查询通过select属性配置。 Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别? 能,Mybatis不仅可以执行一对一、一对多的关联查询, 还可以执行多对一,多对多的关联查询,多对一查询, 其实就是一对一查询,只需要把selectOne修改为selectList即可; 多对多查询,其实就是一对多查询,只需要把selectOne修改为selectList即可。 关联对象查询,有两种实现方式,一种是单独发送一个sql去查询关联对象, 赋给主对象,然后返回主对象。另一种是使用嵌套查询,嵌套查询的含义为使用join查询, 一部分列是A对象的属性值,另外一部分列是关联对象B的属性值, 好处是只发一个sql查询,就可以把主对象和其关联对象查出来。 MyBatis里面的动态Sql是怎么设定的?用什么语法? MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现, 但是如果要写的完整,必须配合where,trim节点,where节点是判断包含节点有 内容就插入where,否则不插入,trim节点是用来判断如果动态语句是以and 或or 开始,那么会自动把这个and或者or取掉。 Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式? 第一种是使用<resultMap>标签,逐一定义列名和对象属性名之间的映射关系。 第二种是使用sql列的别名功能,将列别名书写为对象属性名, 比如T_NAME AS NAME,对象属性名一般是name,小写, 但是列名不区分大小写,Mybatis会忽略列名大小写,
-
[大数据 100] CESI Dongya Wu:大数据标准与应用(高级教程)