数据库系统原理与实践陆鑫习题答案_第1页
数据库系统原理与实践陆鑫习题答案_第2页
数据库系统原理与实践陆鑫习题答案_第3页
数据库系统原理与实践陆鑫习题答案_第4页
数据库系统原理与实践陆鑫习题答案_第5页
已阅读5页,还剩18页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章单选题CDDBC判断题FFFFT填空题网状数据模型用户大数据商业智能系统设计简答题1)什么是数据模型?关系数据库的数据模型与NoSQL数据库的数据模型有哪些区别?答:数据模型是一种描述事物对象的数据特征及其结构形式化表示,通常由数据结构、数据操作、数据约束三个部分组成。关系数据库采用关系数据模型实现数据组织与存储,支持SQL语言操作访问;NoSQL数据库采用非结构化数据模型(如列簇、键值对、文档、图等)实现数据组织与存储,有各自不同的操作API。数据库文件与普通数据文件有哪些区别?答:数据库文件具有如下特点:数据一般不重复存放可支持多个应用程序并发访问数据结构独立于使用它的应用程序对数据增、删、改、查操作均由数据库系统软件进行管理和控制普通数据文件一般不具有数据库的特点,需要程序员编程对数据库文件进行操作访问。3)一个数据库内部通常包含哪些对象?答:一个数据库内部通常包含表、视图、索引、存储过程、触发器等对象。4)数据库系统由哪些部件组成?答:数据库系统又称为数据库应用系统,由用户、应用程序、数据库、数据库管理系统四个部分组成。5)采用列表形式对比分析流行度排名前2位的国产数据库DBMS技术特性,并谈谈自己对解决基础系统软件“卡脖子”问题认识以及发展国产数据库技术有何建议?答:流行度排名前2位的国产数据库DBMS技术特性OceanBaseTiDB分布式部署OceanBase公有云(OceanBaseCloud),是构建在阿里云、AWS等全球主流公有云基础设施上,基于完全自主研发的原生分布式数据库,提供弹性扩展、高性能、主流兼容的数据库云服务。为客户在云上提供服务、弹性、监控、诊断、开发、迁移、备份、恢复的端到端数据库服务化解决方案。云原生的分布式数据库专为云而设计的分布式数据库,通过TiDBOperator可在公有云、私有云、混合云中实现部署工具化、自动化。数据库管理可通过OceanBase开发者工具(OceanBaseDeveloperCenter,ODC)创建和管理数据库中的表、视图等10余种数据库对象。可为指定角色分配对应资源及该资源的访问权限,企业内不同角色间的开发协作亦会变得简单可控。金融级高可用数据采用多副本存储,数据副本通过Multi-Raft协议同步事务日志,多数派写入成功事务才能提交,确保数据强一致性且少数副本发生故障时不影响数据的可用性。数据库复制支持多种关系型数据库、消息队列与OceanBase数据库之间的数据复制,是集数据迁移、实时数据同步和增量数据订阅于一体的数据传输服务,OMS帮助用户低风险、低成本、高效率的实现OceanBase的数据流通,助力构建安全,稳定、高效的数据复制架构。实时HTAP提供行存储引擎TiKV、列存储引擎TiFlash两款存储引擎,TiFlash通过Multi-RaftLearner协议实时从TiKV复制数据,确保行存储引擎TiKV和列存储引擎TiFlash之间的数据强一致。TiKV、TiFlash可按需部署在不同的机器,解决HTAP资源隔离的问题。数据库维护OceanBase运维管理工具(OceanBaseControlPlatform,OCP)提供对OceanBase集群的图形化管理能力,包括数据库组件及相关资源的全生命周期管理、监控告警,性能诊断、故障恢复、备份恢复等,旨在协助客户更加高效地管理和运维OceanBase数据库,降低企业的IT运维成本和用户的学习成本。得益于TiDB存储计算分离的架构的设计,可按需对计算、存储分别进行在线扩容或者缩容,扩容或者缩容过程中对应用运维人员透明。性价比性采用ApacheLicense2.0开源协议,企业版与社区版差异不大。采用兰公共协议MulanPubL-2.0开源。社区版相比与企业版功能缺失较多。解决基础系统软件“卡脖子”问题认识:在操作系统、数据库系统、工业软件等基础系统软件上,国产软件存在技术研发较国外落后、过度依赖国外开源技术等问题,这就导致我国较少具有完全自主知识产权的相关软件,处于着被外国先进技术“卡脖子”的局面。如今把科技自立自强作为国家发展的战略支撑,打好关键核心技术攻坚战,已经成为我国科技圈的共识。想要解决基础系统软件“卡脖子”问题,最重要的是加大对计算机基础技术研究的投入。毋庸置疑,如果想要成功研发一款基础软件,则需要大量的基础理论支持,还要不断在技术上进行探索和创新。这就需要有更多的资金扶持、更多的研发人员参与到基础技术理论的研究中,这样才可以打下坚实的底层基础,才能逐步实现基础软件自主化。同时还需要摆脱国外基础系统软件在国内市场上的独霸地位,让国产基础软件获得市场的支持,这样国内的技术和理论才能在实际使用中不断成熟和完善,以提高市场认可度,缩减市场占有率的差距,逐渐打破国外构筑起的技术壁垒。对发展国产数据库技术有何建议:随着社会信息化不断的发展,数据库的应用场景也越来越多,除了应用在传统的用户数据存储领域,数字化城市、数字化政府、数字化企业的构建也离不开数据库技术的支持。所以国产数据库应当顺应时代发展的需求,把握住大数据时代的机遇,探索新技术,研发新架构,积极开发面向大数据和高性能的新型数据库,这样才能通过产品功能上的差异化优势在市场上与国外先进数据库软件进行有力竞争。除此之外,国产数据库技术在发展时也应当充分考虑信息安全与等级保护的应用场景,研发适合中国信息安全要求的安全数据库产品。维护数据安全的重要性不言而喻,而数据库作为存储信息安全最核心部分——数据,其安全性更是重中之重。由于国外数据库软件无法彻底保证我国数据的安全性,所以国产数据库必须担此大任。第2章单选题CBDAB判断题TTFTF填空题全外连接数据约束候选键用户自定义完整性外键简答题1)什么是关系?它有哪些主要特征?答:关系是一种由行和列组成的、用于组织存储实体数据的二维表,它具有如下关系特征。•表中每行存储实体的一个实例数据•表中每列表示实体的一项属性•表中单元格只能存储单个值•表中不允许有重复行•表中不允许有重复列•表中行顺序可任意•表中列顺序可任意2)主键与候选键是什么关系?在数据库中,主键有什么用途?答:在一个关系中,至少有1个或多个候选键。将最具有代表性的候选键作为该关系的主键。在数据库中,主键具有如下用途:•主键属性列值可用来标识关系表的不同行(元组);•当表之间有关联时,主键可以作为表之间的关联属性列;•许多DBMS产品使用主键列索引顺序来组织表的数据块存储;•通过主键列的索引值可以快速检索关系表中行数据。3)在什么情况下使用代理键?它是如何获得键值?答:在一个关系中,找不出单个列作为主键或没有合适的多列构成复合键时,可定义一个额外的代理键作为该关系的主键。在数据库中,代理键的键值是由DBMS系统自动提供唯一取值的序列数值。4)如何定义空值?在什么情况下,可以使用空值?答:在进行一个关系的创建定义中,若某列施加了NULL列约束,则该列在使用时允许空值。通常,针对一些不必立刻输入数据的列,可将其列默认为空值。5)数据库基础理论研究对促进国产数据库软件技术发展有何作用?答:在数据库软件技术发展中,数据库基础理论至关重要,任何一个数据库基础理论进步,均会带动数据库技术先前发展。因此,国产数据库软件技术发展,必须加大数据库基础理论研究,解决面临的“卡脖子”问题。5.应用题1)关系R和关系S的数据表如图2-33所示。请分别计算(a)RхS(b)RS(c)R∞S(d)σR.B=S.B∧R.C=S.C(RхS)图2-33关系R和关系S答:(a)RхS(b)RS(c)R∞S(d)σR.B=S.B∧R.C=S.C(RхS)2)在图书借阅管理系统中,读者信息表READER、图书信息表BOOK、借阅记录表LOAN定义如下:READER(PerID,Name,Age,TelPhone)BOOK(ISBN,Title,Authors,Publisher)LOAN(PerID,ISBN,Date,Note)使用关系代数表达式写出下列查询:答:查找馆内的“机械工业出版社”图书清单Π{ISBN,Title,Authors,Publisher}(σpublisher=’机械工业出版社’(BOOK))查找在2024-3-6日读者借还了哪些图书?Π{ISBN,Title}(σDate=’2024-3-6’(BOOK∞LOAN))c)查找年龄在20岁以下读者所借图书目录Π{ISBN,Title}(σAge<20(READER∞BOOK∞LOAN))第3章单选题CCCCB判断题FFFFT填空题IBMINSERTINTO数据插入语句ALTERTABLE表结构修改语句Sum()函数LeftJoin简答题1)SQL语言与程序设计语言有何区别?答:SQL语言是一种数据操作语言,只能对数据库及其数据访问操作;程序设计语言是一种实现程序功能逻辑的编程语言,它不但可以操作数据,也可以流程控制,还可实现输入输出处理。2)如何使用子查询与连接查询?答:在实现多表关联查询时,若输出结果来自于单个表,则可以所使用子查询处理。反之,则使用连接查询处理。3)数据完整性包含哪些?SQL语言中如何定义?答:在数据库中,数据完整性包括实体完整性、参照完整性、用户自定义完整性。在SQL语言中,通过主键约束定义实体完整性,通过外键列与主键列的数据一致性约束定义参照完整性,用户可通过列约束实施业务规则来自定义完整性。4)什么是列约束?什么是表约束?它们如何应用?答:列约束是指在创建表结构时对列施加的取值约束,如是否空值、是否唯一等。表约束是指在表级施加的规则,如主键、外键列定义。在SQL语言中,使用一些关键词对列施加约束,如NOTNULL(非空)、UNIQUE(值唯一)等。使用CONSTRAIN表约束子句对表施加约束,如外键及参照完整性定义。5)在数据库SQL程序编程开发中,如何实现用户隐私数据保护?答:在数据库编程开发中,可以使用视图方式限制客户端对一些用户隐私数据访问,也可对用户隐私数据进行加密处理,从而保护用户隐私数据。第4章单选题CBBCB判断题FFTFF填空题弱实体概念数据模型设计,逻辑数据模型设计,物理数据模型设计1对1,1对多,多对多标识符依赖弱实体,非标识符依赖弱实体决定因子,依赖函数简答题1)在数据库设计过程中,各层次数据模型的用途是什么?答:概念数据模型用于数据库设计人员与用户进行交流与沟通;逻辑数据模型用于系统设计者描述数据库设计结构;物理数据模型针对所使用的具体数据库软件,给出数据库实现模型。2)针对复杂信息系统的数据库建模设计,应采用什么设计策略?答:采用自顶向下策略、由内向外策略方式逐步完成数据库设计。3)非规范化的数据库设计会导致哪些问题?答:在数据库中,若数据库设计不合理,可能会导致数据库操作的插入数据异常、更新数据异常、删除数据异常,以及数据库访问性能等问题。4)在系统物理数据模型设计中,需要设计哪些数据库要素?答:在系统物理数据模型设计中,除了设计数据库表外,还需要设计索引、视图、触发器、存储过程等数据库要素。5)在数据库设计中,如何解决用户数据的隐私保护?答:在数据库设计中,可以将一些包含用户隐私数据通过视图方式进行过滤,防止外部直接访问包含隐私的数据表。此外,通过设计用户和角色的数据库对象访问权限,防止非法用户对包含隐私的数据表进行访问。第5章单选题BDBCC判断题TFFTF填空题隔离性,持续性数据库可串行化收回权限,拒绝赋予权限磁带库,光盘库简答题1)DBMS一般应具有哪些主要的数据库管理功能?答:DBMS一般具有数据库定义、数据库运行管理、数据库组织与存储、数据库维护、数据库通信。2)在数据库系统中,事务程序主要解决什么问题?答:事务程序机制主要确保多用户对数据库共享访问的数据正确性。3)在数据库系统中,如何预防事务死锁状况出现?答:在并发事务执行时,使产生死锁的四个必要条件(互斥条件、请求和保持条件、不剥夺条件、环路等待条件)之一不成立,就可以最大可能地预防死锁。4)数据库系统基本安全模型是什么?它是如何实现数据安全访问?答:数据库系统基本安全模型是DBMS提供的用户存取权限控制模型。它采用角色、用户对数据库对象的访问权限约束实现数据安全访问。5)实现数据库恢复的技术原理是什么?答:数据库恢复技术是利用数据库备份文件和数据库事务日志文件来实现数据库恢复处理。具体将根据用户恢复要求,采用前滚事务方式或回滚事务方式恢复数据库。第6章选择题1)C2)D3)D4)C5)B判断题1)F2)F3)T4)T5)T填空题1)数据库服务器端2)语句级触发器,行级触发器3)INSTEADOF触发器4)BEFORE,AFTER5)NEW,OLD简答题PostgreSQL数据库创建、修改和删除存储过程使用哪些主要命令?答:PostgreSQL使用CREATEPROCEDURE创建存储过程,包括存储过程的名称、输入参数、输出参数、以及存储过程体。使用CREATEORREPLACEPROCEDURE重新创建存储过程,对已有存储过程的源码编辑修改后重新创建。如果只需要修改存储过程拥有者、存储过程的名字、存储过程所属模式等进行修改,使用ALTERPROCEDURE命令修改存储过程。当用户创建存储过程之后,可能需要删除,DROPPROCEDURE删除现有过程的定义。使用存储过程编程,在应用上有哪些优点?答:(1)提高代码复用性。存储过程可以重复调用,如果多次需要实现这些SQL语句,就可以重复调用这些存储过程,可以减少数据库开发人员的工作量。(2)减少网络流量。存储过程位于数据库服务器上,用户只需要传递存储过程的名称和参数就可以调用,存储过程只需要将执行结果返回客户端程序,而不需要将大量的服务器端数据传输到客户端程序,降低了网络传输的数据量。(3)提高了安全性。存储过程是存储在数据库中的对象,用户执行需要相应的权限,只有授权用户才能执行相应的存储过程,从而避免了对数据库的恶意攻击,在数据库层面上实现了对数据的访问控制,让数据库管理员更好地管理和保护数据。(4)数据库事务处理。当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用,以确保所有SQL语句或操作的原子性和隔离性。简述PostgreSQL数据库创建触发器的主要步骤?答:使用PostgreSQL创建触发器的基本步骤:(1)检查数据库中将要创建的触发器所依附的表或视图是否存在,如果不存在,必须首先创建该表或视图。(2)创建触发器被触发时所要执行的触发器函数,该函数的类型必须是TRINGER型,是业务处理的逻辑实现。但要注意,有些关系数据库不需要独立定义触发器函数,而是在创建触发器时,将业务处理用触发器的过程体来实现。(3)创建触发器时,一般需要指明触发器依附的表、被触发的时间、是行级还是语句级触发器,触发器执行需要满足的条件。4)简述PostgreSQL数据库的存储过程和触发器的主要区别?答:(1)触发器是被动触发的,而存储过程是主动调用的。触发器是与表相关联的,当特定的事件发生时,自动被触发执行;而存储过程是由用户显式地调用执行。(2)触发器通常用于实现数据完整性约束、审计和日志记录等功能,而存储过程通常用于封装业务逻辑或复杂的数据操作。(3)触发器可以在特定的表上定义,并且可以在语句或行级别上定义,而存储过程是一个独立的可执行代码块,可以在任何地方调用执行。(4)触发器不能接收参数,而存储过程可以接收输入参数和输出参数,并可以返回结果集。(5)触发器的执行是隐式的,不能被用户控制,而存储过程的执行是显式的,由用户调用。5)简述PostgreSQL数据库游标编程的主要步骤?答:(1)声明游标:在PL/pgSQL中,对游标的访问前,必须声明游标变量,其数据类型为refcursor。(2)打开游标:游标变量在使用之前必须先被打开,在PL/pgSQL中有三种形式的OPEN语句,其中两种用于未绑定的游标变量,另外一种用于已绑定的游标变量。打开游标变量就是执行游标所绑定的查询语句,查询返回值存储游标变量中。(3)使用游标:在游标打开时,游标指针就指向游标的开始,数据库提供了FETCH和MOVE命令操纵游标记录。但游标的打开和读取必须在同一个数据库事务中。(4)CLOSE关闭游标:其声明形式为:CLOSEcursorName;当游标数据不再需要时,需要关闭当前游标,以释放其占有的系统资源,主要是释放游标中的数据所占用的内存资源,cursorName是指要关闭游标的名字。5.实践操作题在简易教学管理数据库系统中,定义如下关系模式:STUDENT(SID,SNAME,AGE,SEX)SC(SID,CID,GRADE)COURSE(CID,CNAME,TEACHER)编写触发器实现表与表之间的参照完整性约束;用Springboot+Mybatis+JSP+PostgreSQL编程实现查询学生的各科成绩。参考答案:为了实现表与表之间的参照完整性约束,我们需要确保在`SC`表中插入或更新数据时,`SID`和`CID`字段分别在`STUDENT`和`COURSE`表中存在。以下是一个简单的触发器示例,用于在PostgreSQL数据库中实现这一点:第1步:创建触发器函数,用于检查参照完整性CREATEORREPLACEFUNCTIONcheck_integrity()RETURNSTRIGGERAS$$BEGIN--检查学生ID是否存在于STUDENT表IFNOTEXISTS(SELECT1FROMSTUDENTWHERESID=NEW.SID)THENRAISEEXCEPTION'学生ID不存在:%',NEW.SID;ENDIF;--检查课程ID是否存在于COURSE表IFNOTEXISTS(SELECT1FROMCOURSEWHERECID=NEW.CID)THENRAISEEXCEPTION'课程ID不存在:%',NEW.CID;ENDIF;--如果检查通过,则允许插入或更新RETURNNEW;END;$$LANGUAGEplpgsql;第2步:创建触发器,当SC表插入或更新数据时,调用上面的函数CREATETRIGGERtrigger_check_integrityBEFOREINSERTORUPDATEONSCFOREACHROWEXECUTEFUNCTIONcheck_integrity();第3步:使用SpringBoot+MyBatis+JSP+PostgreSQL来实现查询学生的各科成绩的功能。这里只提供核心代码的概述,不包括完整的项目结构和所有必要的配置文件。(1)SpringBootController:@RestController@RequestMapping("/students")publicclassStudentController{@AutowiredprivateStudentServicestudentService;@GetMapping("/{sid}/grades")publicResponseEntity<?>getStudentGrades(@PathVariable("sid")Stringsid){try{List<GradeDTO>grades=studentService.getStudentGrades(sid);returnResponseEntity.ok(grades);}catch(Exceptione){returnResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e.getMessage());}}}(2)ServiceLayer:@ServicepublicclassStudentService{@AutowiredprivateStudentMapperstudentMapper;publicList<GradeDTO>getStudentGrades(Stringsid){returnstudentMapper.findGradesByStudentId(sid);}}(3)MyBatisMapperInterface:

@MapperpublicinterfaceStudentMapper{@Select("SELECTSC.SID,S.SNAME,C.CNAME,SC.GRADE"+"FROMSC"+"JOINSTUDENTSONSC.SID=S.SID"+"JOINCOURSECONSC.CID=C.CID"+"WHERESC.SID=#{sid}")List<GradeDTO>findGradesByStudentId(Stringsid);}(4)DTO(DataTransferObject):publicclassGradeDTO{privateStringsid;privateStringsname;privateStringcname;privateIntegergrade;//GettersandSetters}(5)JSPView(简单示例,显示学生的成绩列表):<%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>学生成绩</title></head><body><h2>学生成绩列表</h2><tableborder="1"><tr><th>学生ID</th><th>学生姓名</th><th>课程名称</th><th>成绩</th></tr><c:forEachvar="grade"items="${grades}"><tr><td>${grade.sid}</td><td>${grade.sname}</td><td>${ame}</td><td>${grade.grade}</td></tr></c:forEach></table></body></html>请注意,这只是核心程序,实际的实现需要更多的配置和代码,比如SpringBoot的perties配置文件,MyBatis的配置文件和映射文件,以及SpringBoot的启动类等。此外,JSP页面需要与SpringMVC模型整合,以便从后端获取数据并展示在前端页面上。第7章单选题DDABD判断题TTFFT填空题1)最终一致性2)集合3)分区容错性4)4个(local、admin、config和test数据库)5)CypherQueryLanguage简答题NoSQL的特征是什么?答:NoSQL数据库并没有一个统一的架构,但是它们有一些共同特征。(1)不需要预定义模式:不需事先定义数据模式,预定义表结构等。数据中每条记录都可能有不同的属性和格式.(2)无共享架构:NoSQL往往将数据划分后存储在各个本地服务器上,从而提高了系统的性能.(3)弹性可扩展:可以在系统运行的时候,动态增加或者删除结点。不需要停机维护,数据可以自动迁移.(4)分区:NoSQL数据库将数据进行分区,将记录分散在多个节点上面,并且通常分区的同时还要做复制.(5)异步复制:NoSQL中的复制,往往是基于日志的异步复制。这样,数据就可以尽快地写入一个节点,而不会出现网络传输迟延.(6)BASE:相对于ACID特性,NoSQL数据库保证的是BASE特性(BASE是最终一致性和软事务)。Redis支持的数据类型有哪些?在这些类型上有哪些操作?答:Redis支持的数据类型String,Hash,List,Set,Sortedset。针对Strings类型的key-value数据,可进行set,get,decr,incr,mget操作。针对Hash类型数据,可进行hget,hset,hgetall操作。针对List数据,可进行lpush,rpush,lpop,rpop,lrange等操作。针对Set数据,可进行sadd,spop,smembers,sunion等操作。针对SortedSet数据,可进行zadd,zrange,zrem,zcard等操作。3)MongoDB的存储架构是什么?答:Mongodb采用文档、集合来组成数据库。文档是MongoDB中数据的基本单元和核心概念,集合可以被看作没有模式的表。MongoDB每个实例都可容纳多个独立数据库,每个数据库都有自己的集合和权限(数据库)。4)Neo4j的数据模型是什么?请举例说明结点、关系、属性、标签的含义。答:Neo4J的数据模型由结点、关系组成。结点和关系都可以包含属性。结点和关系代表一行数据。属性是数据库行中的字段。标签代表结点和关系的分组。5)HBASE的存储结构?答:HBASE数据库按照表来组织数据存储。在表中分为若干区域,在每个区域中又分为若干存储单元,每个存储单元由若干存储文件组成。5.实践操作题用HBase存储社交网站站内短信信息,要求记录发送者、接收者、时间、内容,有关的查询是发送者可以列出他所有(或按时间段)发出的信息列表(按时间降序排列),接收者可以列出他所有(或按时间段)收到的信息列表(按时间降序排列)。1)设计社交网站短信息管理的数据库结构?2)在HBASE中创建数据表?3)请使用HBaseShell实现相关的功能。。4)请使用HBaseJavaAPI实现相关的功能。答:要记录作者在网络上发表的各类文章在关系数据库中需要设计3个表格:文章表Article(id文章ID,title文章标题,content文章内容,tags文章标签),作者表Author(id作者ID,name姓名,nickname昵称),日志表Blog(Blog_ID日志ID,article_id文章ID,Author_id作者ID,pub_time发表时间,...)。所有作者要在作者表中等级相关信息得到作者ID,发表文章时要等文章表中进行等级和日志表中记录作者ID、文章ID、发表时间等信息,开发相关的应用程序对这三个表格进行操作,完成对每个作者发布的文章的相关信息进行存储管理。按照上面的需求HBase设计表结构为HBlog,行键是ID、列簇有两个Article和Author。使用HBASE的shell创建表的句子是create'HBlog','Article','Author'创建表格,创建只需要给出表中得列簇名称,使用put语句把作者发表的文章的信息写入到HBlog表中的创建只需要给出表中得列簇名称,列簇中的列是在操作时根据数据的内容加进去的。为了例子说明,这里Article列簇中有3个列分别是title、content、tags,Author列簇有两个列分别是name和nickname。HBlog的定义如下:RowKey(行键)ColumnFamily(列簇)ColumnKeys(列名称)IDArticletitle,content,tagsAuthorname,nicknameHBlog的逻辑结构表明这个表的的行键和对应的两个列簇,这里列的名称只是为了和关系数据库中的表格进行对比而写出的。HBlog存储的信息结构如下:RowKeyTimeStampArticle(列簇)Author(列簇)11318179218111121Article:title="HBasebook"1318179216279829Article:content=Nosql...1318179215898902Article:tages=数据库1318179214466785A=Xixi...1318179213577898Author.nickname=.xyz.1318179212512001Author.nickname=.abc.1010011…上面的HBlog存储的信息结构通过了对数据的操作得到的数据库中数据的内容表示,对行键为1的行数据在不同的时间内经过了6次修改,修改的内容包括文章表中的title、content、tags和作者表中的name和nickname对应的内容,表明该作者发表了1篇文章,并对自己的nickname进行了修改。列可以在使用中动态增加,同一列簇的列会群聚在一个存储单元上,应将具有相同I/O特性的列设计在一个列簇上以提高性能,列根据应用的需求变化,适合非结构化数据;HBase通过行和列确定单元数据,数据的值可能有多个版本,不同版本的值按照时间倒序排列,即最新的数据排在最前面,查询时默认返回最新版本。如上例中行键1的Author:nickname值有两个版本,分别为1318179213577898对应的“xyz”和1318179212512001对应的“abc”(对应到实际业务,可理解为作者在某时刻修改了nickname为xyz,但旧值仍然存在)。时间戳默认为系统当前时间(精确到毫秒),也可以在写入数据时指定该值;每个单元格值通过4个值唯一索引,表名称+行键+列簇名称:列名称+时间戳所对应的值,例如上例中{tableName='HBlog',RowKey='1',ColumnName='author:nickname',TimeStamp='1318179213577898'}索引到的唯一值是“xyz”1)数据结构--表结构为HBlog,行键是ID、列簇有两个Article和AuthorRowKey(行键)ColumnFamily(列簇)ColumnKeys(列名称)IDArticletitle,content,tagsAuthorname,nickname2)在HBASE中创建数据表安装HBASE,启动HBASE,启动HBASEshell出现提示符为hbase(main):001:0>create'HBlog','Article','Author'//创建HBlog3)HBaseShell命令A:在表格中插入数据数据增加putHBkog1,"Article:title","HBasebook"putHBkog1,"Article:conten"."Nosql"putHBkog1,"Article:tages",,"数据库"putHBkog1,"A","Xixi"putHBkog1,"Author.nickname","xyz."putHBkog1,"Author.nickname",".abc."B数据查看查看指定key的数据get"HBLog",1显示已经插入的信息C数据修改putHBkog"数据库","Article:tages":,"非关系数据库"D数据删除删除列:deleteHBkog1,"Article:tages"删除整行:deleteHBkog1E禁/启用表禁用disableHBkog启用enableHBkog4)请使用HBaseJavaAPI实现相关的功能。使用JavaAPI对HBASE的数据进行操作,前提条件是成功安装maven项目和安装idea开发工具。利用idea工具创建maven项目,在maven项目中创建如下依赖,主要用于操作hbase<dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.1.3</version></dependency><!--/artifact/org.apache.hbase/hbase--><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase</artifactId><version>2.1.3</version><type>pom</type></dependency>完整的Java代码如下:packagecom.uestc.experiment.hbase1;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.TableName;importorg.apache.hadoop.hbase.client.*;importorg.apache.hadoop.hbase.util.Bytes;importjava.io.IOException;publicclassHBaseTest{privatestaticConfigurationconf=HBaseConfiguration.create();privatestaticAdminadmin;privatestaticConnectionconnection=null;static{conf.set("hbase.zookeeper.quorum","");conf.set("perty.clientPort","2181");conf.set("zookeeper.znode.parent","/hbase");try{connection=ConnectionFactory.createConnection(conf);admin=connection.getAdmin();}catch(IOExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args)throwsException{HBaseTesthBase=newHBaseTest();hBase.creatTable("dev_info",newString[]{'HBlog','Article','Author'});创建HBlog表hBase.put("HBlog","1","article","title","HBasebook");hBase.get("HBlog","1");hBase.scan("HBlog");hBase.deleteTable("HBlog");System.out.println(admin.tableExists(TableName.valueOf("HBlog")));admin.close();connection.close();}publicvoidcreatTable(StringtableName,String[]family)throwsException{if(admin.tableExists(TableName.valueOf(tableName))){System.out.println("tableExists!");thrownewException("tableExists!");}//通过管理员对象创建表TableDescriptorBuildertableDescriptorBuilder

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论