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

下载本文档

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

文档简介

第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=TableDescriptorBuilder.newBuilder(TableName.valueOf(tableName));//给表添加列族'Article','Author'两个列簇for(inti=0;i<family.length;i++){tableDescriptorBuilder.setColumnFamily(ColumnFamilyDescriptorBuilder.of(family[i]));}TableDescriptortableDescriptor=tableDescriptorBuilder.build();//创建表admin.createTable(tableDescriptor);System.out.println("createtablesuccess");}//添加一条数据,通过HTablePut为已存在的表添加数据publicvoidput(StringtableName,Stringrow,StringcolumnFamily,Stringcolumn,Stringdata)throwsIOException{Tabletable=connection.getTable(TableName.valueOf(tableName));Putput=newPut(Bytes.toBytes(row));put.addColumn(Bytes.toBytes(columnFamily),Bytes.toBytes(column),Bytes.toBytes(data));table.put(put);System.out.println("putsuccess");}//获取tableName表里列为row的结果集publicvoidget(StringtableName,Stringrow)throwsIOException{Tabletable=co

温馨提示

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

评论

0/150

提交评论