山东大学软件学院非关系型数据库2023-2024复习

课程名称:非关系型数据库

教师:yzm老师

考试时间:1月12日

个人感受:总体简单,简答题几乎都是提前背诵过的,整理在下面了。大题很开放,具体给分便看老师啦,老师很好,讲课很清晰,最终得分94。

简答题

1.什么是弱一致性,强一致性,最终一致性?举例说明。不一致窗口界限确定?

弱一致性:假如A写入值到存储系统,系统不能保证后续A、B、C的读取操作均能返回最新值。

最终一致性:弱一致性的一种特例,假如A先写了一个值到存储系统,存储系统保证在A、B、C读取值之前没有其他写操作更新该值,最终所有的读取操作都会读到A写入的最新值。

最终一致性方面最出名的系统可以说是DNS系统,当更新一个域名的IP以后,根据配置策略以及缓存控制策略的不同,最终所有的客户都会看到最新的值。

强一致性(即时一致性):假如A写入值到存储系统,系统保证后续A、B、C的读取操作均能返回最新值。

不一致窗口:从A写入到后续操作A、B、C读取操作能读取到最新值这一段时间。(不一致性窗口大小的影响因素:交互延迟、系统负载、复制技术中replica的个数)

2.大数据的四个特征

数据模型发展:结构化模型→半结构化模型→OLAP分析模型→大数据模型

大数据(big data,mega data),或称巨量资料,指的是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

1)大量化:数据一直都在以每年50%的速度增长,也就是说每两年就增长一倍。

2)快速化:从数据的生成到消耗,时间窗口非常小,可用于生成决策的时间非常少。

3)多样化:大数据是由结构化和非结构化数据组成的。

4)价值化:价值密度低,商业价值高。

3.NWR模型介绍(N W R的含义),如何设置实现高可用性(分布式系统中怎样保持高可用性/高一致性/平衡读写性能)?在分布式系统中使用NWR模型怎样实现强一致性?

NWR是一种在分布式存储系统中用于控制一致性级别的策略,NWR模型将CAP的选择权交给了用户,由用户自己选择CAP中的哪两个。

N:代表N个备份,即复制的节点数量

R:至少成功读取R个备份时,认为可以拿到正确的数据(成功读操作的最小节点数)

W:至少有W个副本被修改成功,才认为数据写好了(成功写操作的最小节点数)

R+W>N,分布式系统提供强一致性的保证,因为读取数据的节点和被同步写入的节点有重叠。

R=N,W=1高可用性。让W=1,这样可以使得写延迟达到最低,实现最高的可用性,同时通过异步机制更新剩余的N-W个节点。

R=1,W=N高一致性。读一个副本,写完所有副本。此时可用性特别是写操作的性能就会大大降低。

平衡读写性能(AC):当数据不多,单台可以解决,求不需要容错和扩展性的时候,分配N=1,根据公式W+R>N,则W=1,R=1.(W=Q,R=Q where Q=N/2+1一般应用适用,读写性能之间取得平衡,如N=3,W=2,R=2)

4.BASE和ACID的介绍以及BASE和ACID的区别

BASE模型完全不同于ACID模型,牺牲高一致性,获得可用性或可靠性。

BASE模型

1)Basically Availble --基本可用

分布式系统在出现不可预知故障的时候,允许损失部分可用性。但这不等价于系统不可用,会损失响应时间或者相关的功能。

2)Soft-state --软状态/柔性事务

允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。例如有三个副本机制,一个节点更新,另外两个节点不变,但不影响用户体验,存在不一致窗口。

3)Eventual Consistency --最终一致性

系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

ACID理论

1)原子性:一个事务中所有的操作都必须全部完成,要么全部不完成。

2)一致性:在事务的开始或者结束时,数据库应该在一致状态。

3)隔离性:事务将假定只有它自己在操作数据库,彼此不知晓。

4)持久性:一旦事务完成,就不能返回。

5.数据一致性、CAP理论

数据一致性

在分布式系统完成某写操作后任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性。

CAP理论

一个分布式系统不可能满足一致性、可用性和分区容错性这三个需求,最多只能同时满足两个。

C:Consistency一致性:在分布式系统完成某写操作后任何读操作,都应该获取到该写操作写入的那个最新的值。相当于要求分布式系统中的各节点时时刻刻保持数据的一致性。

A:Availability可用性:一直可以正常的做读写操作。客户端可以一直正常访问并得到系统的正常响应。用户角度来看,不会出现系统操作失败或者访问超时等问题。

P:Tolerance of network Partition分区容错性:指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务,也就是说部分故障不影响整体使用。

6.两阶段提交协议

可以保证分布式事务中,要么所有参与的进程都提交事务成功,要么都取消事务,这样做可以在分布式环境中保持ACID中A(原子性)。

1.在两阶段提交协议中,包含了两种角色

1)参与者:实际处理事务的机器

2)协调者:其中一台单独的处理分布式事务的机器

2.算法分为两个阶段

1)投票阶段(准备阶段)

协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)

2)提交阶段

协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。

 

3.优缺点

优点:实现简单

缺点:1)同步阻塞问题

执行过程中,所有参与节点都是事务阻塞型的。当参与者占有公共资源时,其他第三方节点访问公共资源不得不处于阻塞状态。

2)单点故障

由于协调者的重要性,一旦协调者发生故障。参与者会一直阻塞下去。尤其在第二阶段,协调者发生故障,那么所有的参与者还都处于锁定事务资源的状态中,而无法继续完成事务操作。(如果是协调者挂掉,可以重新选举一个协调者,但是无法解决因为协调者宕机导致的参与者处于阻塞状态的问题)

3)数据不一致

若协调者向参与者发送commit请求之后,发生了局部网络异常或者在发送commit请求过程中协调者发生了故障,这回导致只有一部分参与者接受到了commit请求。而在这部分参与者接到commit请求之后就会执行commit操作。但是其他部分未接到commit请求的机器则无法执行事务提交。于是整个分布式系统便出现了数据不一致性的现象。

4)二阶段无法解决的问题

协调者再发出commit消息之后宕机,而唯一接收到这条消息的参与者同时也宕机了。那么即使协调者通过选举协议产生了新的协调者,这条事务的状态也是不确定的,没人知道事务是否被已经提交。

7.举例说明两阶段提交协议

8.非关数据库的分类的特点对比

四种非关系型数据库介绍和适用场景

(一)HBase

HBase(Hadoop Database)是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

HBase使用场景

1)存储互联网持续更新的网页副本

2)抓取增量数据进行分析、处理

3)内容服务:可存储大量的短链接以及和原始长链接的映射关系

4)信息交换:高的写吞吐量,极大的表,数据中心的强一致性

HBase特点

1)大:一个表可以有上亿行,上百万列

2)面向列:面向列(族)的存储和权限控制,列(族)独立检索

3)稀疏:对于为空(null)的列,并不占用存储空间,因此表可以设计的非常稀疏

Hbase与传统关系型数据库区别

1.数据类型

HBase只保存字符串类型,所有类型都由用户自己处理

关系数据库有丰富的类型选择和存储方式

2.数据操作

HBase操作只有很简单的插入、查询、删除、清空等,表和表之间是分离的,没有复杂的表和表之间的关系,所以也不能也没有必要实现表和表之间的关联等操作

传统的关系数据通常有各种各样的函数、连接操作

3.存储模式

HBase是基于列存储的,每个列族都有几个文件保存,不同列族的文件是分离的

传统的关系数据库是基于表格结构和行模式保存的

4.数据维护

HBase的更新是一个主键或者列对应的新的版本,旧版本会保留,实际上是插入了新的数据

传统关系数据库里面是替换修改

5.可伸缩性

HBase能轻易的增加或者减少硬件数量,而且对错误的兼容性比较高

传统的关系数据库通常需要增加中间层才能实现类似的功能

HBase的主要功能组件

库函数:链接到每个客户端

一个HMaster主服务器

许多个HRegion服务器

HBase三层结构

1)Zookeeper文件:记录-ROOT-表的位置信息。

2)-ROOT-表:记录了.META.表中的region信息。

3).META.表:记录了用户表的HRegion信息,.META.表可以有多个 HRegion,保存了HBase中所有数据表的HRegion位置信息。

Hbase两种文件类型

HFile:HBase中KeyValue数据的存储格式,HFile是Hadoop的二进制格式文件,实际上HStoreFile就是对HFile做了轻量级包装,即HStoreFile底层就是HFile

HLogFile:HBase中WAL(Write Ahead Log)的存储格式,物理上是Hadoop的顺序文件。

(二)键值数据库(Redis)

Redis是一个key-value存储系统,key是字符串类型,value支持的数据类型包括string、list(列表)、set(集合)、zset(有序集合)和hash。速度快,具有极高的并发读写性能,通过key快速查找到value,只能通过key查询。

Redis支持主从同步,可以分布在集群上,数据可以水平切割。

Redis使用场景

适用场景:数据高并发的读写、海量数据的读写、对扩展性要求高的数据。

不适用场景:需要事务支持(关系型数据库)、基于sql结构化查询储存、关系复杂。

Redis使用实例

1)Redis基数统计:HyperLogLog做基数统计。

优点:在输入元素数量或者体积非常大时,计算基数所需的空间总是固定的,只需12KB内存,就可以计算接近2^64个不同元素的基数。可以用于统计上线用户数量,但是不会存储输入元素本身。

2)Redis投票网站:

hash表存储文章的基本信息,key是article:1111,value是标题、地址、时间等等。

zset存储排序的信息。

set存储历史投票纪录,防止用户多次投票。Set中无重复元素。投票set以voted:1111开头。

(三)文档型数据库MongoDB

MongoDB将数据存储为一个文档(数据存储的最小单位),数据结构由键值(key value)对组成,key为字符串类型,value可以是字符串、数值、文档或者数组等。MongoDB不提供join连接操作,不提供对事务的支持。

适用场景

网站数据;缓存;大尺寸,低价值的数据;高伸缩性的场景;用于对象及JSON 数据的存储

不适用场景

高度事务性的系统;传统的商业智能应用;需要SQL的问题

MongoDB优点

模式灵活;易扩展;丰富的功能(索引、聚合、固定集合和文件存储);性能卓越;管理简便;

MongoDB缺点

不支持JOIN查询;不支持事务处理;更新数据时,数据不是实时写入磁盘中,有可能出现数据丢失;MongoDB在保存数据时,需要预留很大的空间,对磁盘的空间需求呈现逐渐增大的趋势。

MongoDB应用案例

用电信息采集案例、人社大数据平台(数据采集服务首先对原始数据进行本地缓存,然后再将文件上传至MongoDB私有云,而没有把原始数据直接以键值对形式写入MongoDB私有云。一方面可以有效的保证原始数据的安全性,在很大程度上避免因网络中断,机房断电等异常造成的数据丢失另一方面,缓存后的文件写入MongoDB,与键值对写入MongoDB相比,前者速度快的多,能更好适应高速采集数据流的大数据处理。利用多台服务器以MongoDB为基础构建了原始采集数据的云存储架构)、人社电子档案袋、文档和评论(微信朋友圈文章管理)。

(四)图数据库Neo4j

Neo4j是一个高性能的NoSQL图形数据库,使用图来描述数据模型,把数据保存为图中的节点以及节点之间的关系。节点表示实体,边表示实体之间的关系(关系有开始节点和结束节点);节点和边都可以有自己的属性(属性是由键值对组成,键名是字符串属性值要么是原始值,要么是原始值组装成的一个数组),不同实体通过各种不同的关系关联起来,形成复杂的对象图。

Neo4j提供了在对象图上进行查找和遍历的功能:深度搜索和广度搜索

Neo4j特点

1)完整的ACID支持

2)高可用性

3)轻易扩展到上亿级别的节点和关系

4)通过遍历工具高速检索数据

Neo4j应用实例

社会化网络图、文件系统路径表示

Neo4j转化

1.关系数据库->图数据库

2.键值对数据库->图数据库

3.文档数据库->图数据库

9.nosql和关系型数据库的区别

关系数据库

优点

通用性和高性能

 能保持数据的一致性(事务处理)

 能够保证最小冗余

 能实现复杂查询如JOIN

 拥有成熟的技术

缺点

 不适合在分布式环境中的向外扩展;难以支持高并发读写

关系型数据库在大量数据的写入处理表结构变更及建立索引字段不固定的应用对简单查询需要快速返回结果的处理存在不足

NoSQL的优点

 易于数据的分散;提升性能和增大规模;模式自由;扩展性好

10.描述RDB数据库、NoSQL数据库和NewSQL数据库的区别和特点

1)RDB数据库是将复杂的数据结构以行和列的形式进行存储及展示,对数据的操作几乎都是建立在一个或多个关系表的基础上。通过表的关系来实现数据库的管理。典型的关系型数据库有Oracle、MySql、SQL Server等。

RDBMS优势:

(通用性和高性能)保持数据的一致性(事务处理)、最小冗余、复杂查询如join、成熟的技术关系。

RDBMS不足:

大量数据的写入处理;表结构变更及建立索引;字段不固定的应用;对简单查询需要快速返回结果的处理。

2)NoSQL指的是非关系型的数据库。NoSQL用于超大规模数据的存储。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。常见的有Redis、Hbase、MongoDB等。

NoSQL优势:

易于数据的分散;提升性能和增大规模;模式自由;扩展性好。

NoSQL缺点:

不能保证ACID,采取最终一致性原则。

3)NewSQL是对各种新的可扩展/高性能数据库的简称,具有NoSQL对海量数据的存储管理能力,保持了传统数据库支持ACID和SQL等特性。

NewSql特点:

支持关系数据模型;使用SQL作为其主要接口

11.Hbase中预写日志的原理和作用

预写日志(WAL,Write Ahead Log)是HBase中用于保证数据一致性的机制。

原理是在对数据进行修改操作之前,先将修改操作的信息写入WAL中,然后再进行实际的数据修改。如果在数据修改过程中发生错误,可以通过WAL中记录的信息来恢复数据。

预写日志在HBase中有如下作用:

1)保证数据一致性:在数据修改过程中,如果发生错误,可以通过WAL中记录的信息来恢复数据,保证数据的一致性。

2)支持数据恢复:如果HBase服务器意外崩溃,可以通过WAL中记录的信息来恢复数据。

3)支持多种数据修改操作:WAL支持多种数据修改操作,包括插入、更新和删除操作。

4)加速数据修改:由于WAL的写入是异步的,因此可以在写入WAL的同时进行数据修改,从而加速数据修改的速度。

5)保证最终一致性:WAL可以保证最终一致。

12.MongoDB怎样实现分页

在MongoDB中,可以通过使用skip和limit方法来实现分页。

例如,要查询第二页的数据(每页10条),可以使用以下代码:

db.collection.find().skip(10).limit(10)

这里的skip方法用于跳过前10条数据,limit方法用于限制返回的文档数。如果要查询第三页的数据,可以使用以下代码:

db.collection.find().skip(20).limit(10)

以此类推,可以通过调整skip和limit方法的参数来实现分页查询。

NoSQL转换题

1.给出ER图转化为MongoDB,说明数据库设计逻辑

2.选用一种非关系型数据库完成朋友圈设计,写出刷新算法

使用关系数据库管理网络发布的文章时,需要有文件表、评论表、点赞表和附件表,其中评论表、点赞表和附件表都持有文章表主键。

使用MongoDB时,只需要一个文章集合就可以,这个集合包括,文章内容属性,文章发表时间属性,文件状态属性,评论数组属性,点赞数组属性,文章附件数组属性。

通常的操作是:先查询文章列表,再根据用户选择查询某一篇文章的详细信息,详细信息中包括文章内容,附件,点赞信息和评论信息。这样的需要使用关系型数据库也可以很好地胜任,只是在查询详细信息时使用关联从四个表中获取数据。

如果需要在文章列表中就展示文章内容、评论、附件和点赞信息(这样的需要也是存在的,比如微信的朋友圈就是这样)。此时使用关系型数据库就障碍,需要先从文章表中查询出文章列表,在根据每一个文章的主键到其他表中获取信息,需要执行大量SQL,而在这样的需求下mongoDB任然是只需要执行一次查询就可以获取到全部数据。

{

_id:"0001",
friend:["00002","00003"......]

}

{

_id:"00000001",
发布者:"0001",
内容:"....",
发布时间:...

}

3.将下面的ER图转换成Redis存储,写出数据库结构和示例数据(每个实体集、联系集至少5条)

department实体,属性有dept_name,building,budget

instructor 实体,属性有ID,name,salary

student 实体,属性有ID,name,tot_cred

department对instructor是dept_inst一对多,且instructor全部参与

instructor对student是一对多

department对student是一对多

key       value
instructorID:123456            {name:"张三", salary:1,inst_dept:"软件学院"}

departmentName:瓜瓜家         {building:鹅鹅大厦,budget:200}

studentId:233333              {name:李四,tot_cred:25,stu_dept:瓜瓜家,advisor:123456}

4.NoSQL实现二度好友、三度好友

选择一种NoSQL数据库较好实现QQ的二度好友、三度好友的检索,写出数据库结构并描述检索二度好友、三度好友的算法思想

Neo4j

点为QQuser,无向边表示好友关系。

二度好友:广度优先搜索走两步,碰到的点加入好友集合,再去除一度好友。

三度好友:bfs走三步,去除一度、二度好友

5.将下图Neo4j的数据库转换成Hbase和MongoDB,写出数据库结构并列出所有图示的示例数据

HBase列存储:

国家表:

Rowkey timestamp 列族(info(首都,人口,面积)) 列族(relationship)

例如:中国 t0 info:area 960万km^2 belongs_to 国家

城市表:

Rowkey timestamp 列族(info(人口,面积,经度,纬度))

例如:北京 t1 info:area 2345km^2

MongoDB文档

国家collection:

{

    _id:0000000001

    Name:中国

    人口:1131

    面积:960

    首都:北京

    城市:[

{Name:北京

人口:13213

面积:123

经度:11

纬度:22

}

]

属于:国家

}

城市collection:

{

Name:北京

人口:13213

面积:123

经度:11

纬度:22

}

6.自选数据库实现类似qq空间的功能,实现至少包括日志、说说、相册照片、好友互访记录的功能,要求给出设计结构结果,描述空间刷新的算法

7.给出图数据库的图关系,转化为列存储HBase,要求给出设计模式和数据实例

列族:name,friend,boss,love,dislike,colleague,marry

8.RDB转redis,hbase,类似下图的一个结构

9.微信朋友圈的功能实现,照片描述,点赞评论,自己选择恰当的数据库,描述数据库设计,写出朋友圈刷新算法思想

使用关系数据库管理网络发布的文章时,需要有文件表、评论表、点赞表和附件表,其中评论表、点赞表和附件表都持有文章表主键。

使用MongoDB时,只需要一个文章集合就可以,这个集合包括,文章内容属性,文章发表时间属性,文件状态属性,评论数组属性,点赞数组属性,文章附件数组属性。

通常的操作是:先查询文章列表,再根据用户选择查询某一篇文章的详细信息,详细信息中包括文章内容,附件,点赞信息和评论信息。

这样的需要使用关系型数据库也可以很好地胜任,只是在查询详细信息时使用关联从四个表中获取数据。

如果需要在文章列表中就展示文章内容、评论、附件和点赞信息。此时使用关系型数据库就障碍,需要先从文章表中查询出文章列表,在根据每一个文章的主键到其他表中获取信息,需要执行大量SQL,而在这样的需求下mongoDB任然是只需要执行一次查询就可以获取到全部数据。

10.neo4j转mongodb/HBase,图数据库结构如下

{

"_id":ObjectId("52568965"),
"name":"Managers",
"member":["Faut","Gul"],
"part_of":"Users"

}

{

"_id":ObjectId("525689653"),
"name":"Users",
"member":["Can","Burcu","Engin","Ail"],
"ROOT":"Reference Node",

"PART":["Technicians","Managers"]

}

11.使用一种你认为最合适的Nosql数据库设计微博后台,实现功能包括发布微博(大V发微博如何通知粉丝),评论、点赞,以及微博粉丝管理等功能

12.

1)Hbase转Redis和Neo4j

2)Neo4j转MongoDB和HBase

3)ER转MongoDB/HBase/Neo4j/Redis

  • 21
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值