NoSQL数据库复习题目要点
1.关于Neo4j
中节点(Nodes),关系(Relations),属性(Properties),标签(Labels)说法不正确的有(C)
A.属性(Properties)表示的是实体对象(Entity)中的属性
B.标签(Labels)是对实体对象(Entity)做的说明
C.关系连接实体对象(Entity),关系没有方向性
D.节点代表最终的实体对象
解析:
在 Neo4j 中:
-
节点(Nodes) 表示的是实体对象(例如:人、城市、电影等)。
-
关系(Relationships) 表示实体之间的连接,是有方向性的(例如:
W -> 喜欢 -> Y
),可以表示如“朋友”、“喜欢”、“位于”等含义。 -
属性(Properties) 是附加在节点或关系上的键值对(例如:姓名、年龄、关系时间等)。
-
标签(Labels) 是用来对节点进行分类的(例如:
:Person
,:Movie
)。
因此,选项 C 的说法“关系没有方向性”是错误的,在 Neo4j 中关系是有方向性的。
2.下列哪些场景不适合使用Neo4j(C)
A.强相关的社交网络
B.关系中的路径查找
C.数据检索
D.电商里的物品推荐
解析:
-
A. 强相关的社交网络 ✅ 适合
Neo4j 是图数据库,擅长处理高度连接的数据,比如社交网络中的“谁认识谁”。 -
B. 关系中的路径查找 ✅ 适合
这是图数据库的强项,如最短路径、朋友的朋友等复杂关系链分析。 -
C. 数据检索 ❌ 不适合(相对而言)
如果是大量简单的数据检索(如按照主键查找、批量分页展示等),传统的关系型数据库(如 MySQL、PostgreSQL)或文档数据库(如 MongoDB)更高效。Neo4j 在这方面效率并不突出,尤其在面对大规模非关系型查询时。 -
D. 电商里的物品推荐 ✅ 适合
推荐系统涉及用户-商品-标签之间的复杂图结构,Neo4j 可以高效处理这些连接关系。
3.与关系模型相比,关于NoSQL不正确的是(B)
A.列中的内容和类型可能是随意的、无定义的
B.会为空值留出存储空间
C.NoSQL中可能没有明确的结构
D.列可能是复合型的
解析:
-
A. 列中的内容和类型可能是随意的、无定义的 ✅ 正确
在某些 NoSQL 类型(如文档型、列族型)中,不同记录可以有不同的字段和类型,结构是灵活的。 -
B. 会为空值留出存储空间 ❌ 不正确(应选项)
NoSQL 通常不会为未定义或空的字段预留空间,这是它节省存储、提高灵活性的重要方式。而关系型数据库往往为所有字段预留空间(即使是 NULL)。 -
C. NoSQL 中可能没有明确的结构 ✅ 正确
例如 MongoDB 中可以每条记录结构都不同,无需固定 schema。 -
D. 列可能是复合型的 ✅ 正确
在文档型数据库中,字段可以是数组、嵌套文档等复杂结构。
4.以下HBase的说法哪个是不正确的?(B)
A.在HBase中由行键、列族、列和时间戳来唯一确定一个单元格数值。
B.在HBase Shell中创建表时,不需要预先定义列族。
C.HBase中所有数据都是字符串的形式。
D.HBase中不同行之间可以由不同的列组成。
解析:
-
A. 正确。HBase 中的单元格(cell)由行键(row key)、列族(column family)、列限定符(column qualifier)和时间戳(timestamp)唯一确定。
-
B. 不正确。在 HBase Shell 中创建表时,必须在
create
命令里预先定义至少一个列族,例如:create 'my_table', 'cf1', 'cf2'
如果不定义列族,表根本无法创建。
-
C. 正确(广义上)。HBase 底层存储的是字节数组(byte[]),但通常以字符串形式进行读写和展示,因此常说“按字符串方式存取”。
-
D. 正确。不同行可以拥有不同的列,无需统一所有行的列结构。
5.Neo4j的查询语言是Cypher
6.MongoDB 默认使用的端口号是 27017
7.Redis数据库用于用户会话和缓存数据
8.GridFS集合由fs.files和fs.chunks两个部分组成
9.Redis相比MongoDB的主要优势体现()【选】
-
性能表现
- 基于内存存储
- 延迟通常小于1ms(毫秒级响应)
- 适用于实时性要求高的场景
-
数据结构支持
数据结构 Redis支持 MongoDB支持 字符串 ✔️ ✔️ 哈希 ✔️ ❌ 有序集合 ✔️ ❌ 地理空间索引 ✔️ ✔️ 流数据结构 ✔️ ❌ -
缓存特性
原子操作
- 实时排行榜(使用有序集合)
- 分布式锁(
SETNX
命令) - 消息队列(Stream/List结构)
- 会话缓存(高速读写)
-
- 支持
INCR/DECR
等原子命令 - 事务操作通过
MULTI/EXEC
实现:
应用场景优势
- 支持
适合选择Redis的场景特征:
- 数据量可容纳在内存中
- 需要亚毫秒级响应
- 高频读写操作
- 数据结构操作复杂度高于简单CRU
10.分片的主要目的是()【选】
NoSQL数据库中分片(Sharding)的主要目标可归纳为以下几点:
-
水平扩展能力
通过将数据分布到多个节点,突破单机存储和性能瓶颈。当数据规模或并发请求超过单节点处理能力时,分片允许系统通过增加机器实现线性扩展 -
负载均衡优化
-
故障隔离提升可用性
不同分片独立运行,单个节点故障仅影响局部数据访问。 -
地理分布优化
支持将特定分片部署在靠近用户的区域。例如北美用户数据存储在AWS us-east区域,亚洲用户数据存储在ap-southeast区域,显著降低访问延迟。
11.NoSQL数据库是什么,其与MySQL数据的主要区别是什么?【简答】
NoSQL数据库是指非关系型的分布式数据库系统,其核心特征是通过灵活的数据模型处理海量数据和高并发场景。与MySQL这类关系型数据库的主要区别体现在以下方面:
-
数据结构
- MySQL采用结构化表格模型,数据需符合预定义模式
- NoSQL支持灵活存储格式,如文档型(JSON)、键值对、图结构等:
-
扩展模式
- MySQL主要依赖垂直扩展(提升单机性能)
- NoSQL擅长水平扩展(添加更多节点),满足$10^6$级QPS需求
-
事务特性
- MySQL保证ACID特性:原子性、一致性、隔离性、持久性
- NoSQL普遍采用BASE原则(基本可用、软状态、最终一致性)
-
查询方式
- MySQL使用标准SQL语言
- NoSQL通过API或特定查询语法,如MongoDB
12.分片与副本集区别是什么?【简答】
- 数据分布方式
- 副本集:所有节点存储完全相同的数据副本
- 分片:数据按特定规则划分后分布存储
- 核心目标
- 副本集:保障数据高可用性与故障恢复
- 分片:实现数据存储的水平扩展与负载均衡
- 读写操作
- 副本集:写操作仅发生在主节点,读操作可分散到从节点
- 分片:写操作根据分片键自动路由,读操作可定向到特定分片
- 扩展维度
- 副本集:通过增加节点提升读吞吐量(垂直扩展)
- 分片:通过增加机器提升写吞吐量和存储容量(水平扩展)
- 数据一致性
- 副本集:所有节点保持强一致性(通过oplog同步)
- 分片:最终一致性,跨分片事务需要特殊处理
典型应用场景:
- 副本集适用于需要故障自动转移、数据冗余备份的场景
- 分片适用于单机无法容纳的超大规模数据集(如TB/PB级)
13.GridFS查询文件过程【简答】
14.年龄在19-21学生信息 分类总数、均值 库存大于40,价格降序排序【操作题】