NoSql数据库原理期末(课后思考题)

1. 绪论

1.1 在典型互联网业务中,关系型数据库有哪些瓶颈?

  1. 可扩展性差: 难以应对海量数据和高并发读写,纵向扩展(升级硬件)成本高且有上限。
  2. 高并发下的I/O瓶颈: 当并发读写量巨大时,磁盘I/O成为主要瓶颈。
  3. 读写性能不足: 对于简单的查询-写入场景,关系型数据库的事务和锁机制带来较大开销。
  4. 固定表结构不灵活: schema 预定义且严谨,难以快速应对业务变化和存储半结构化/非结构化数据。
  5. 可用性问题: 传统的主从架构在主库故障时,切换可能不够自动化,存在服务中断风险。

1.2 分析NoSQL数据库的技术特点。

  1. 无固定Schema: 数据模型灵活,可以动态添加字段,适合快速迭代的开发模式。
  2. 高可扩展性: 支持水平扩展,通过添加节点来分散负载,通常采用分布式架构。
  3. 高性能: 通过简化数据模型(如键值对)、弱化一致性保证等方式,获得极高的读写吞吐量。
  4. 高可用性: 采用多副本、无中心节点等设计,保证系统在部分节点故障时仍能提供服务。
  5. 最终一致性: 遵循BASE理论,放宽对强一致性的要求,以换取系统的高可用和分区容错性。

1.3 NoSQL是否可以取代关系型数据库?描述两者的关系。
不可以取代 。两者是互补而非替代关系。

  • 关系型数据库 : 适用于需要强一致性、复杂事务、结构化数据的场景,如银行交易、财务系统。
  • NoSQL数据库 : 适用于高并发、海量数据、灵活 schema、最终一致性可接受 的场景,如社交网络、物联网、内容管理系统。
    在现代架构中,两者常共存,形成混合持久化策略。

1.4 NoSQL可以解决大数据技术体系中的哪些问题?

  1. 海量数据存储问题: 通过水平扩展,支持PB级别的数据存储。
  2. 高并发读写问题: 通过分布式架构,将请求分散到多个节点,处理百万级并发。
  3. 多样数据类型问题: 灵活的数据模型可以存储日志、文档、图片、关系图等半结构化和非结构化数据。
  4. 高可用与容灾问题: 通过数据多副本和自动故障转移,保证系统7x24小时可用。

1.5 NoSQL的典型应用场景。

  • 社交网络(如:用户关系图谱 - Neo4j)
  • 内容管理/博客平台(如:文章存储 - MongoDB)
  • 电商购物车/会话缓存(如:Redis)
  • 物联网数据采集(如:传感器时序数据 - InfluxDB)
  • 实时消息系统(如:Cassandra)
  • 搜索引擎(如:Elasticsearch)

1.6 云计算的定义。

云计算是一种通过互联网("云")按需提供计算资源(包括服务器、存储、数据库、网络、软件、分析和智能)的模式,通常采用按使用量付费的定价模型。

1.7 云计算的基本特征。

  1. 按需自助服务
  2. 广泛的网络接入
  3. 资源池化
  4. 快速弹性伸缩
  5. 可计量的服务

1.8 云计算按照服务模式可以分为哪几类?分别指什么?

  1. IaaS(基础设施即服务): 提供最底层的计算、存储、网络等基础资源。用户无需管理底层基础设施,但需要控制和部署操作系统及应用程序。例如:AWS EC2, 阿里云ECS。
  2. PaaS(平台即服务): 提供应用程序的开发、运行环境,包括操作系统、数据库、Web服务器等。用户只需关注应用程序本身的开发和部署。例如:Google App Engine, Heroku。
  3. SaaS(软件即服务): 通过互联网提供完整的、可直接使用的应用程序。用户无需管理任何底层设施,直接使用软件。例如:Gmail, Salesforce, 钉钉。

1.9 什么是容器化技术。

容器化技术是一种操作系统级的虚拟化技术,用于将应用程序及其所有依赖项(库、环境变量、配置文件等)打包成一个独立的、标准化的单元(称为容器 )。该容器可以在任何支持该技术的环境中一致地运行。Docker 是其最典型的代表。


2. NoSQL数据库基本原理

2.1 描述分布式数据管理的特点。

  • 数据分片: 将数据拆分成多个部分,分布到不同的节点上。
  • 数据副本: 同一份数据在多个节点上存有副本,以提高可靠性和读性能。
  • 一致性维护: 需要机制来保证多个副本之间的数据一致性。
  • 高可用性: 部分节点故障时,系统整体仍能提供服务。
  • 负载均衡: 请求被均匀分布到各个节点,避免单点过热。

2.2 什么是CAP原理?

CAP原理指出,一个分布式系统最多只能同时满足一致性可用性分区容错性这三项中的两项。

  • C(一致性): 所有节点在同一时间看到的数据是相同的。
  • A(可用性): 每个请求都能得到响应(不保证是最新数据)。
  • P(分区容错性): 系统在遇到网络分区(节点间无法通信)时仍能继续运行。

2.3 CAP原理是否适用于单机环境?
不适用 。CAP理论的前提是分布式系统。单机系统不存在网络分区(P)的问题,因此可以同时保证强一致性(C)和高可用性(A)。

2.4 试述BASE的具体含义。

BASE是对CAP中一致性和可用性权衡的结果,其核心思想是最终一致性

  • BA(基本可用): 系统在出现故障时,保证核心功能仍然可用,允许损失部分非核心功能或性能(如响应时间变长)。
  • S(软状态): 允许系统中的数据存在中间状态,并且该中间状态不会影响系统整体可用性。
  • E(最终一致性): 经过一段时间后,所有数据副本最终会达到一致的状态。

2.5 在数据一致性问题上,ACID和BASE的差别是什么?

  • ACID : 强调强一致性,是关系型数据库的核心。事务是原子的、隔离的,数据在事务结束后立即处于一致状态。
  • BASE : 强调高可用性,是NoSQL数据库的哲学。数据一致性是"最终"的,允许存在短暂的不一致窗口。

2.6 列举NoSQL的数据模型,描述其基本特点和适用场景,并为每种模式举出1种常见数据库。

  1. 键值模型 : 数据是键值对集合,简单高效。适用:会话存储、缓存。数据库:Redis
  2. 文档模型 : 数据是类似JSON的文档,schema灵活。适用:内容管理、用户档案。数据库:MongoDB
  3. 列族模型 : 数据按列族存储,适合大规模数据分析。适用:日志系统、推荐系统。数据库:HBase
  4. 图模型 : 数据以节点和边的关系存储,擅长处理复杂关系。适用:社交网络、欺诈检测、推荐引擎。数据库:Neo4j

2.7 布隆过滤器的优缺点是什么?如何降低布隆过滤器的误报率?

  • 优点: 空间效率和查询时间都远超一般算法。
  • 缺点
    1. 存在误报率(False Positive):可能将不属于集合的元素误判为存在。
    2. 不支持删除操作
  • 降低误报率的方法
    1. 增加二进制向量(位数组)的长度
    2. 增加哈希函数的数量

3. MongoDB原理和使用

3.1 描述MongoDB数据库的主要特点

  1. 文档模型: 以BSON(二进制JSON)格式存储文档,schema灵活。
  2. 高性能: 支持嵌入式数据模型,减少了数据库的I/O操作。
  3. 高可用性: 提供副本集,实现自动故障转移。
  4. 水平扩展: 提供分片集群,支持海量数据存储和高并发。
  5. 丰富的查询语言: 支持丰富的查询、聚合操作和索引(包括地理空间索引)。

4. MongoDB的管理与集群部署

4.1 描述MongoDB集群的数据多副本策略。

通过副本集实现。一个副本集包含多个MongoDB服务器节点:

  • 一个主节点: 负责处理所有写操作和读操作(默认)。
  • 一个或多个从节点: 复制主节点的数据,可用于读操作或作为备份。
  • 一个仲裁节点(可选): 不存储数据,仅用于投票选举。当主节点故障时,剩余节点会自动选举出新的主节点,实现高可用。

4.2 描述MongoDB的分片机制,支持几种分片策略?

MongoDB通过分片集群 实现水平扩展,将数据分布到多个分片(服务器)上。

支持两种分片策略:

  1. 范围分片: 基于分片键的值范围将数据划分为不同的块。适合范围查询。
  2. 哈希分片: 对分片键的值计算哈希值,根据哈希值分布数据。保证数据均匀分布,但不适合范围查询。

4.3 描述MongoDB的分片集群架构(包含的角色和每个角色的作用)。

  1. 分片: 存储实际数据子集的MongoDB实例(通常是副本集)。每个分片是集群中的一个数据子集。
  2. 配置服务器: 存储集群的元数据和配置信息(如数据块与分片的映射关系)。本质上是特殊的MongoDB副本集。
  3. 查询路由 : 即mongos实例,是应用程序的访问入口。它缓存配置服务器的元数据,将客户端请求路由到正确的分片上。

5. 图数据库Neo4J

5.1 什么是Neo4j?并对其数据模型进行详细描述。

Neo4j是一个高性能的原生图数据库

其数据模型由以下核心部分组成:

  • 节点 : 表示实体,例如一个人、一个产品。节点可以有标签 (如 Person)和属性 (如 name: "Alice")。
  • 关系 : 表示节点之间的连接,关系是有方向 的。关系必须有类型 (如 FOLLOWS)和也可以有属性 (如 since: 2023)。
  • 属性: 是键值对,用于描述节点或关系的特征。

5.2 简要描述Neo4j的使用场景(至少4个)。

  1. 社交网络: 分析用户之间的关系,寻找好友推荐或影响力人物。
  2. 欺诈检测: 通过分析交易、设备、IP地址之间的复杂关系网络,识别欺诈团伙。
  3. 实时推荐引擎: "购买了该商品的人也购买了..."这类基于关系的推荐。
  4. 知识图谱: 构建和查询实体间的复杂知识网络。

5.3 Neo4j作为一种图数据库,在构建知识图谱方面有哪些优势?

  1. 白描式存储: 直观地以节点和边存储知识,与人的思维方式一致。
  2. 高效关系查询: 专门为遍历关系优化,查询深度关系的性能远高于关系型数据库。
  3. 灵活性强: 易于添加新的实体类型、关系类型和属性,无需复杂的表结构变更。
  4. 支持Cypher查询语言: 声明式的、强大的图查询语言,能直观地表达复杂的图模式匹配。

6. 键值对数据库Redis

6.1 Redis应用场景的特点,并举例说明。
特点: 数据存储在内存中,读写速度极快,支持丰富的数据结构。

  • 举例
    1. 缓存: 缓存数据库查询结果,减轻后端压力。(场景:网页内容缓存)
    2. 会话存储: 存储用户登录会话信息。(场景:电商购物车)
    3. 排行榜: 利用有序集合实现实时排行榜。(场景:游戏积分榜)
    4. 消息队列: 使用列表的推送和弹出操作实现简单的消息队列。

6.2 描述Redis的数据类型。

  1. String: 最简单的键值类型。
  2. List: 字符串列表,按插入顺序排序。
  3. Set: 无序的字符串集合,元素不重复。
  4. Sorted Set: 有序的字符串集合,每个元素关联一个分数用于排序。
  5. Hash: 键值对集合,适合存储对象。
  6. BitmapsHyperLogLogs: 用于特定场景如统计活跃用户。

6.3 Redis数据库的集群架构(多副本机制和分片机制)。

  • 多副本机制(主从复制): 一个主节点负责写,多个从节点复制主节点数据负责读,实现读写分离和数据备份。
  • 分片机制(Redis Cluster): 采用无中心架构,数据被分到16384个槽中,每个节点负责一部分槽。客户端可以直接连接到任意节点,如果数据不在该节点,节点会返回重定向信息。

6.4 Redis的事务机制是什么?它和传统的MySQL数据库事务有什么不同。

  • Redis事务 : 使用 MULTI, EXEC 等命令实现。它本质上是将一组命令打包、顺序执行,但不支持回滚。在执行过程中,即使某条命令失败,后面的命令仍会继续执行。
  • 与MySQL的不同
    1. 原子性: MySQL支持回滚(Atomicity),Redis不支持。
    2. 隔离性: Redis是单线程执行事务,因此总是具有隔离性。MySQL有不同的事务隔离级别。
    3. 一致性: 两者都致力于保证一致性。

6.5 Redis的持久化方式有哪些?各自的优缺点是什么?

  1. RDB(快照)
    • 优点: 文件紧凑,适合灾难恢复;最大化Redis性能;恢复大数据集时比AOF快。
    • 缺点: 会丢失最后一次快照之后的数据;在数据集庞大时,fork子进程的过程可能很耗时。
  2. AOF(追加日志)
    • 优点: 数据耐久性更高,最多丢失一秒的数据;AOF文件易于理解和解析。
    • 缺点: 文件通常比RDB大;恢复速度慢;写负载高时可能影响性能。

7. Cassandra的原理和使用

7.1 HBase和Cassandra在架构上有什么不同?

  • HBase: 主从架构。依赖于HDFS进行存储,依赖ZooKeeper进行协调,RegionServer负责数据读写,HMaster负责管理。
  • Cassandra: 无中心节点的P2P架构。所有节点完全对等,数据分布式存储在每个节点上。

7.2 各自的架构有什么优缺点?

  • HBase
    • 优点: 与Hadoop生态集成紧密,适合做大数据分析。
    • 缺点: 架构复杂,组件多,存在单点故障风险(HMaster)。
  • Cassandra
    • 优点: 无单点故障,高可用性和可扩展性极佳,写入性能非常高。
    • 缺点: 读取延迟可能因数据分布而产生波动,对分析查询的支持不如HBase。

7.3 Cassandra系统架构中,种子节点的作用是什么?

种子节点用于节点发现。当一个新节点加入集群时,它会联系种子节点来获取集群的拓扑信息(其他节点的网络地址),从而加入到正确的环中。

7.4 Cassandra表中的主键分为哪几种类型?如何区分它们?

  • 分区键: 主键的第一个部分(或复合部分)。用于决定数据在集群中存储在哪个节点上。
  • 聚簇列: 主键中分区键之后的部分。用于决定数据在分区内的排序顺序。
  • 区分 : 主键定义中,第一部分是分区键,后面的部分是聚簇列。例如:PRIMARY KEY ((part_key1, part_key2), cluster_key1, cluster_key2),括号内的是复合分区键。

7.5 Cassandra如何支持数据一致性?

Cassandra通过可调一致性来实现。客户端可以为每次读写操作指定一致性级别:

  • 写一致性级别 : 如 ONEQUORUMALL。表示写操作需要成功写入多少个副本才算成功。
  • 读一致性级别 : 如 ONEQUORUMALL。表示读操作需要从多少个副本读取数据后才返回。
    通过设置 写一致性级别 + 读一致性级别 > 副本因子,可以实现强一致性。

8. Hadoop和Hbase

8.1 HDFS是否属于NoSQL数据库?
不属于 。HDFS是一个分布式文件系统,它提供的是底层的文件存储服务,不具备NoSQL数据库所拥有的数据模型、灵活的API和高效的数据检索能力。

8.2 请说明用HDFS进行数据管理存在的问题。

  1. 高延迟访问: 不适合低延迟的随机读写。
  2. 不支持小文件存储: 大量小文件会耗尽NameNode内存。
  3. 只能批量写入: 不支持文件的随机修改。
  4. 缺少结构化/半结构化数据的管理能力

8.3 HBase采用了什么样的数据结构?

HBase内部使用LSM-Tree作为其核心存储结构。它将随机写转换为顺序写,先写入内存中的MemStore,再刷写到磁盘形成不可变的HFile,非常适合高写入吞吐量的场景。

8.4 HBase的拓扑结构是什么?每个角色起什么作用?

  1. HMaster: 管理节点,负责RegionServer的负载均衡、分配Region、管理表的DDL操作。
  2. RegionServer: 数据节点,负责处理对其上Region的读写请求。
  3. Region: 表的分片,当表变大时会被自动分割。
  4. ZooKeeper: 协调者,负责维护集群状态,协助HMaster进行故障发现和选举。

8.5 描述meta表的结构。
hbase:meta 表存储了所有用户Region的位置信息。

  • 行键: 表名,起始行键,时间戳
  • info:regioninfo(包含该Region的序列化信息),info:server(存储该Region所在的RegionServer地址)。

8.6 预写日志(WAL)的作用。

WAL的核心作用是数据持久化和故障恢复。当数据写入MemStore之前,会先被追加写入WAL。如果RegionServer崩溃,MemStore中未持久化的数据可以通过重放WAL来恢复,防止数据丢失。


9. 其他NoSQL数据库简介

9.1 时序数据库可以用在哪些场景?(4个)

  1. 物联网监控: 存储传感器上报的温度、湿度等数据。
  2. 系统监控: 存储服务器CPU、内存、网络指标。
  3. 金融行业: 存储股票、加密货币的实时价格。
  4. 应用性能监控: 存储应用的请求量、响应时间等指标。

9.2 时序数据库是否需要具备灵活的数据更新能力?为什么?
不需要 。时序数据通常是只追加的,数据点一旦产生就很少需要更新(如一个传感器在特定时间戳的温度值)。将资源优化用于高速写入和按时间范围查询,比支持灵活更新更重要。

9.3 搜索引擎的工作原理是什么?

  1. 爬取: 遍历互联网,发现和下载网页内容。
  2. 解析: 提取网页中的文本、链接和其他元数据。
  3. 建立索引: 对解析后的内容进行分析(分词等),构建一个类似于书籍末尾"索引"的倒排索引,实现从词到文档的快速映射。
  4. 搜索与排序: 根据用户查询,从索引中找出相关文档,并按相关性等进行排序后返回给用户。

9.4 搜索引擎中如何对搜索结果排序的?

使用复杂的排序算法,综合考虑数百个因素,核心包括:

  • TF-IDF: 评估一个词在文档中的重要程度。
  • PageRank: 评估网页本身的权威性。
  • BM25: 一种比TF-IDF更先进的评分函数。
  • 用户行为与个性化: 点击率、用户历史搜索记录等。
  • 内容质量与新鲜度: 内容原创性、发布时间等。
相关推荐
野犬寒鸦8 分钟前
从零起步学习JVM || 第一章:类加载器与双亲委派机制模型详解
java·jvm·数据库·后端·学习
IvorySQL1 小时前
PostgreSQL 分区表的 ALTER TABLE 语句执行机制解析
数据库·postgresql·开源
·云扬·1 小时前
MySQL 8.0 Redo Log 归档与禁用实战指南
android·数据库·mysql
IT邦德1 小时前
Oracle 26ai DataGuard 搭建(RAC到单机)
数据库·oracle
惊讶的猫2 小时前
redis分片集群
数据库·redis·缓存·分片集群·海量数据存储·高并发写
不爱缺氧i2 小时前
完全卸载MariaDB
数据库·mariadb
纤纡.2 小时前
Linux中SQL 从基础到进阶:五大分类详解与表结构操作(ALTER/DROP)全攻略
linux·数据库·sql
jiunian_cn2 小时前
【Redis】渐进式遍历
数据库·redis·缓存
橙露2 小时前
Spring Boot 核心原理:自动配置机制与自定义 Starter 开发
java·数据库·spring boot
冰暮流星2 小时前
sql语言之分组语句group by
java·数据库·sql