注:18级 软工大数据 Nosql考试考试时间:2020/12/30 任课教师:李晖
下面是我以软工方向所学整理的答案
一:4分X3
1:ACID和BASE理论的区别
2:一致性hash算法
一眼不考
3:关系型数据库、Nosql和NewSQL的区别
SQL:
好处来源于它的统一性和易用性,缺点是面对大量的数据时,他的性能会随着数据库的增大而急剧下降。
NoSQL:
以放宽ACID原则为代价,NoSQL采取的是最终一致性原则,而不是像关系型数据库那样地严格遵守着ACID的原则,这意味着如果在特定时间段内没有特定数据项的更新,则最终对其所有的访问都将返回最后更新的值。 这就是这样的系统通常被描述为提供基本保证的原因(基本可用,软状态,最终一致性) — 而不是ACID。
面向互联网应用,如web2.0,半结构化,非结构化数据的存储
NewSQL:
NewSQL选择汲取了SQL和NewSQL的优点,具有NoSQL对海量数据的存储管理能力,保持了传统数据库支持ACID和SQL等特性,但是目前而言,不适用于所有的场景。
二:将下列RDB关系模式转换成redis,写出每个关系和联系集的Schema,每个关系和实例至少给出五行数据(16分)
![img](https://i-blog.csdnimg.cn/blog_migrate/c2b357b261d7c9b33bf2b27a51b2e2c4.png)
三:使用一种你认为最合适的Nosql数据库设计微博后台,实现功能包括发布微博(大V发微博如何通知粉丝),评论、点赞,以及微博粉丝管理等功能(16分)
MongoDB
设计一个用户集合,每个用户在集合内维护一个文档,大v也视为用户
用户文档内包括用户ID等必要信息,维护一个粉丝ID数组,一个微博ID数组,一个点赞微博ID数组
设计一个微博集合,每个微博维护一个文档,文档内包括微博ID,发布时间等必要信息,一个评论数组,一个点赞人ID数组
大v发布微博时,在微博集合内生成一个文档,同时将该微博ID和简介推送给大v粉丝ID数组
粉丝评论时,在微博文档内新增数据字段,可以把评论做成嵌入式文档,包含评论内容,评论人等信息
点赞时,在微博文档内更新点赞人ID数组,在用户集合内更新点赞微博ID数组
微博粉丝管理方面,关注时,修改被关注者文档内的粉丝ID数组,修改关注者文档内的关注者数组,取关时做相反操作
PS.当只涉及用户之间的行为时,比如关注取关,往往只有两个用户的文档被修改,这种程度上开销不大,同时保证两个文档的一致性还是可以的。
但当删除微博时,用户的点赞微博ID数组并不会更新,这是因为开销太大了,如果用户访问,返回访问失败即可
四:将下图Neo4j数据库的内容分别转换为Hbase和Mongo存储,写出转换后的所有数据(16分)
![img](https://i-blog.csdnimg.cn/blog_migrate/f1a195d689e7fbcd4a78e2b672ed4455.png)
Mongo把国家设置为一个集合,中国,英国等设置成文档,人口,面积等直接在文档内写成键值对,首都写成内嵌式文档,城市写成数组
HBase把国家设置为表,国家名设置为RowKey,人口等直接写成一个列,首都维护为列簇,城市维护为数组
五:Paxos调度,A能和B、C通信,E能和C、D通信,A决定周三去爬长城,E决定周五去爬长城,请给出paxos调度过程和调度结果(10分)
软工没讲不考