NoSQL-Review

#NoSQL #Assignment #Neo4j #Mongodb

什么是 NoSQL 数据库 ?

  • NoSQL数据库是一种非关系型数据库,它不遵循传统的关系数据库管理系统(RDBMS)的结构。
  • NoSQL数据库的设计初衷是为了解决大规模数据集的存储和检索问题,特别是在分布式环境中。
  • NoSQL数据库适用于需要处理大量数据、高吞吐量和灵活数据模型的应用程序,例如大数据应用、实时分析、内容管理系统等。

NoSQL数据库有哪些类型?请列举并简要介绍其中几种

  • 键值存储(Key-Value Stores):

    • 这种类型的数据库通过键值对来存储数据,键是唯一的,用于检索值。
    • 例子:Redis, Riak
  • 文档存储(Document Stores):

    • 文档存储数据库存储类似于JSONXML的文档,这些文档可以包含多种数据类型和结构
      • 例子:MongoDB, CouchDB
  • 列存储(Column Stores):

    • 列存储数据库将数据存储在列中,而不是行,这使得它们非常适合处理大量的写入操作和列查询
    • 例子:Cassandra, HBase
  • 图形数据库(Graph Databases):

    • 图形数据库用于存储实体之间的关系,非常适合社交网络、推荐系统等需要处理复杂关系的应用。
    • 例子:Neo4j, OrientDB

请解释关系型数据库与 NoSQL 数据库之间的主要区别

类别 关系型数据库(RDBMS) NoSQL数据库
数据模型 基于关系模型,数据以表格形式存储,表格由行和列组成,通过外键与其他表格建立关系。 不基于关系模型,数据存储方式多样,如键值对、文档、列或图形。
模式Schema 需要预先定义模式,数据结构固定,对数据的变更需要修改模式。 通常不需要预先定义模式,数据结构灵活,易于适应数据的变化。
扩展性 扩展性有限,通常通过垂直扩展(增加单个服务器的资源)来提升性能。 设计之初就考虑了水平扩展,通过增加更多的服务器来提升性能和存储能力。
一致性 通常遵循ACID原则(原子性、一致性、隔离性、持久性),保证事务的强一致性。 通常遵循CAP理论,提供最终一致性,牺牲一定的一致性以获得更好的可用性和分区容错性。
查询语言 使用SQL(结构化查询语言)进行数据查询和操作。 使用自定义的查询语言或API,不是SQL。
事务处理 支持复杂的事务处理,包括多表事务。 事务处理能力有限,许多NoSQL数据库不支持跨文档或跨键的事务。
数据存储 数据存储在单一的数据库服务器上,通常使用B树或其他索引结构来优化查询。 数据可能分布在多个服务器上,根据其类型使用不同的存储和索引机制。
使用场景 适用于需要复杂查询、事务处理和数据一致性的应用,如金融、会计系统。 适用于需要高扩展性、处理大量非结构化数据或快速迭代开发的应用,如大数据分析、实时推荐系统。
性能 在小规模数据集上提供高性能,但在大规模数据集上可能遇到性能瓶颈。 在大规模数据集上提供高性能,但在小规模数据集上可能不如关系型数据库高效。
  • 关系型数据库
    • 中心化的
    • 处理密集,结构化的数据
    • 满足 ACID 性
    • 遵循 CA 原则
  • NoSQL
    • 去中心化的
    • 处理稀疏数据,半/非结构化的数据
    • 主要是查询,很少更新
    • 满足 BASE 性
    • 遵循 AP 或 CP 原则

请解释 CAP 定理,并说明它在 NoSQL数据库中的重要性

CAP定理,也称为布鲁尔定理(Brewer's theorem)

是由计算机科学家埃里克·布鲁尔在2000年提出的一个概念,用来描述分布式系统在设计时需要做出的权衡。

一致性(Consistency)

在分布式系统中,当一个数据项更新后,所有节点应保证对该数据项的读取都将得到更新后的值。也就是说,如果一个节点更新了数据,其他节点在读取时也应该得到这个最新的数据。

可用性(Availability)

系统在任何时候都能够响应客户端的请求。即使在部分节点失败的情况下,系统仍然能够提供服务。

分区容错性(Partition Tolerance)

系统在网络分区(即网络中的一部分节点无法与其他节点通信)的情况下仍然能够继续运行。

CAP 定理 - 最多可以处理三个属性中的两个属性

CAP定理的核心观点是,在任何给定时间,一个分布式系统最多只能同时满足上述三个特性中的两个。这意味着设计者必须在这三个特性中做出选择:

  • CA: 如果选择一致性和可用性,系统将无法容忍网络分区,一旦发生分区,系统将无法继续服务。SQL
  • CP: 如果选择一致性和分区容错性,系统在网络分区的情况下将无法保证所有请求都能得到响应MongoDB, HBase, Redis
  • AP: 如果选择可用性和分区容错性,系统将无法保证在所有节点上数据的一致性,可能会采用最终一致性模型。 CouchBD, Cassandra, DynamoDB, Riak
在NoSQL数据库中,CAP定理的重要性体现在:
  • 设计决策:
    • NoSQL数据库的设计者和开发者需要根据CAP定理来决定数据库的架构,特别是当面对大规模分布式系统时。
  • 性能优化:
    • 在分布式系统中,为了提高性能和可扩展性,很多NoSQL数据库选择了可用性和分区容错性,牺牲了强一致性,采用最终一致性模型。
  • 应用场景:
    • 不同的NoSQL数据库根据其应用场景和需求,可能在CAP定理的三个特性中做出不同的权衡。例如,一些数据库可能更注重一致性,而另一些则可能更注重可用性和分区容错性

请解释以下概念

高可用性(High Availability)

高可用性是指系统在面对硬件故障、软件故障、网络问题或其他问题时,仍能继续运行并提供服务的能力。在NoSQL数据库中,高可用性通常通过以下方式实现:

副本:数据在多个节点上进行复制,以便在主节点故障时,其他副本可以接管服务。
故障转移:系统能够自动检测到节点故障,并迅速将请求重定向到健康的节点。
冗余:通过在不同的物理位置或服务器上存储数据副本,减少单点故障的风险。

可扩展性(Scalability)

可扩展性是指系统能够通过增加资源(如服务器、存储或处理能力)
来应对增长的工作负载。NoSQL数据库的可扩展性通常分为两种:

  • 垂直扩展(Vertical Scaling):通过增加单个服务器的资源(如CPU、内存) 来提升性能。
  • 水平扩展(Horizontal Scaling):通过增加更多的服务器或节点来分散负载,这是NoSQL数据库的常见扩展方式,允许系统几乎无限地扩展以处理更大的数据量和更高的并发请求。
分布式系统(Distributed System)

分布式系统是由多个物理或逻辑上分离的计算机组件组成的系统,这些组件通过网络相互连接和通信,协同工作以完成复杂的任务。在NoSQL数据库的上下文中,分布式系统的特点包括:

数据分布:数据被分割并存储在多个节点上,以实现负载均衡和冗余。
网络通信:节点之间通过网络进行数据交换和协调。
容错性:系统设计能够处理节点或网络的故障,确保整体服务的连续性。
一致性:尽管数据分布在多个节点上,系统仍需保证数据的一致性,可能是强一致性或最终一致性。
并发控制:系统需要管理多个用户或进程同时对数据进行读写操作,避免冲突和数据损坏。

请解释以下 NoSQL 数据库的特点

  • 键值存储(Key-Value Store)
    • 简洁:数据主要采用Key-Value(KV)形式储存
    • 高速:数据驻留内存,重启时可再次加载进行使用
    • 易扩展:根据系统负载量,灵活添加或删除服务器
    • 对键可设置失效时间
  • 列存储 (Column Store)
    • 更好的可扩展性
    • 高可用性
    • 适合离线批量数据处理
  • 文档数据库(Document Store)
    • 核心概念是 "文档 "的概念,它与 RDBMS 中的行相对应
    • 以某些标准格式或编码封装和编码数据,如 JSON(BSON)
    • 文档在数据库中通过代表该文档的唯一密钥进行处理
    • 将文档作为一个整体处理,避免将文档拆分为其组成的名称/值对
    • 文档是无模式的,可以是非结构的数据
  • 图形数据库(Graph Store)
    • 面向图形
    • 一切都以边、节点或属性的形式存储
    • 每个节点和边可以有任意数量的属性
    • 节点和边都可以贴标签
    • 标签可用于缩小搜索范围
数据库类型 特点 例子
键值存储 - 简单性:模型简单,易于理解和实现。
- 高性能:读写速度快,因为数据通过键直接访问。
- 灵活性:值可以是任何数据类型,包括字符串、数字、二进制数据等。
- 扩展性:易于水平扩展,通过增加节点来提高性能和容量。
Redis, Riak
列存储 - 优化写入:因为只有列的一部分需要更新,所以写入操作更高效。
- 列式查询:查询特定列时性能更高,因为只需要读取和处理需要的列。
- 可扩展性:易于水平扩展,可以通过增加节点来扩展存储容量。
Cassandra, HBase
文档数据库 - 灵活性:文档可以包含复杂的嵌套结构,适应不断变化的数据模型。
- 自描述性:文档包含其结构的元数据,无需预先定义模式。
- 丰富查询:支持对文档内嵌套数据的查询。
MongoDB, CouchDB
图形数据库 - 关系导向:专注于存储和查询实体之间的关系。
- 灵活的查询:支持复杂的关系查询,如最短路径、社区检测等。
- 高效的遍历:优化了图遍历操作,可以快速找到关系路径。
Neo4j, OrientDB

请解释以下 NoSQL 数据库的适用场景, 具体到哪种数据库,为什么

a. 实时分析:
适用数据库:列族数据库(如Canssandra)
原因:优化了时间戳索引和快速的数据插入与查询,适合实时数据的收集和分析。全文搜索引擎则提供了强大的文本处理和搜索能力,适合实时日志分析和监控。
b. 大数据处理:
适用数据库:列存储数据库(如Cassandra, HBase) 或 文档数据库(如MongoDB)。
原因:列存储数据库优化了列的读写操作,适合处理大规模数据集,特别是在需要快速列查询的场景。文档数据库则因其灵活性和丰富的查询功能,适合处理结构化或半结构化的大数据。
c. 社交网络:
适用数据库:图形数据库(如Neo4j, OrientDB)。
原因:社交网络中存在大量的用户关系和交互数据,图形数据库能够高效地存储和查询这些复杂的关系,支持社交网络中的好友关系、社交图谱分析等。
d. 物联网 (IoT):
适用数据库:键值数据库(如Redis) 或 文档数据库(如MongoDB)。
原因:物联网设备产生大量的非结构化,时序数据库可以高效地存储和查询这些数据。同时,物联网数据通常是半结构化的,文档数据库的灵活性使其成为处理这类数据的理想选择。

请描述一个实际应用场景,说明为什么选择使用 NoSQL 数据库而不是关系型数据库

实际应用场景:社交媒体平台
应用描述:
一个社交媒体平台允许用户创建个人资料、发布状态更新、分享图片和视频、关注其他用户以及参与评论和点赞等社交互动。

  • 数据模型的灵活性
    社交媒体平台的数据结构经常变化,例如用户资料、帖子、评论等,它们可能是半结构化的,包含多种数据类型。NoSQL数据库如MongoDB允许灵活的数据模型,无需预先定义严格的模式。
  • 水平扩展性
    社交媒体平台可能迅速增长,需要处理大量用户和数据。NoSQL数据库如Cassandra设计用于水平扩展,通过增加更多节点来处理更大的数据量和用户请求。
    高性能的读写操作:
    用户生成内容和实时交互需要快速响应。NoSQL数据库通常提供高性能的读写操作,特别是在分布式环境中。
  • 高可用性
    社交媒体平台需要24/7的高可用性。NoSQL数据库通过数据复制和故障转移机制,确保服务的持续可用性。
  • 处理非关系型数据
    社交媒体数据如用户关系图、内容推荐等,是高度互联的非关系型数据。图形数据库如Neo4j可以有效地存储和查询这些复杂的网络关系。
  • 大规模数据处理
    社交媒体平台产生的数据量巨大,包括用户生成的内容、日志数据等。使用Hadoop或Spark等大数据处理框架与NoSQL数据库结合,可以高效地处理和分析这些数据。
  • 多样化的查询需求
    社交媒体平台需要支持复杂的查询,如搜索、推荐、趋势分析等。NoSQL数据库提供了丰富的查询语言和API,可以满足这些需求。
  • 成本效益
    与关系型数据库相比,NoSQL数据库通常提供更灵活的部署选项,包括云服务,这有助于降低成本和提高资源利用率。
  • 开发速度
    社交媒体平台需要快速迭代和部署新功能。NoSQL数据库的灵活性有助于加速开发过程,减少模式变更的复杂性。
    通过上述原因,社交媒体平台选择使用NoSQL数据库而不是关系型数据库,可以更好地满足其业务需求,提供更好的用户体验,并支持快速增长和变化

OPTIONAL MATCH 会搜索可能存在也可能不存在的描述模式,并将模式中不存在的标识符赋值为 NULL。

使用Neo4j中的Cypher语言创建一个热门电影/电视剧/动漫数据库,要求有至少三类标签、六个节点和两种关系

// 创建 Show 节点
CREATE (got:Show {title: "Game of Thrones"})
	
// 创建 Character 节点
CREATE (jon:Character {name: "Jon Snow"})
CREATE (dany:Character {name: "Daenerys Targaryen"})
CREATE (tyrion:Character {name: "Tyrion Lannister"})
	
// 创建 Actor 节点
CREATE (kit:Actor {name: "Kit Harington"})
CREATE (emilia:Actor {name: "Emilia Clarke"})
CREATE (peter:Actor {name: "Peter Dinklage"})
	
CREATE (kit)-[:ACTED_IN]->(got)
CREATE (emilia)-[:ACTED_IN]->(got)
CREATE (peter)-[:ACTED_IN]->(got)
	
CREATE (jon)-[:HAS_CHARACTER]->(got)
CREATE (dany)-[:HAS_CHARACTER]->(got)
CREATE (tyrion)-[:HAS_CHARACTER]->(got)
	
CREATE (kit)-[:PLAYS]->(jon)
CREATE (emilia)-[:PLAYS]->(dany)
CREATE (peter)-[:PLAYS]->(tyrion)	

简述MongoDB数据库的优势

  • 易用性:灵活的文档模型。JSON格式简单易学
  • 支持高性能访问数据。存储引擎是文档型数据库的核心组件。
  • 可扩展性:支持大数据分布式存储,服务能力水平可横向弹性扩展

OLTP and OLAP

OLTP

英文全称是 Online Transaction Processing System,在线事务处理系统
可以理解为日常的业务系统,比如像 ERP、OA、CRM 等等,这些业务系统主要是管理企业的基本业务流程,对数据的处理方式主要是以增、删、改为主

OLAP

英文全称是 Online Analytical Processing System,在线分析处理系统
可以理解为分析型系统,比如在商业智能BI应用中,支撑到前端可视化分析的数据仓库

主要差异
特性 OLTP(联机事务处理) OLAP(联机分析处理)
数据处理类型 以增删改处理为主 以查询操作为主
数据来源 业务系统中直接产生的数据 来自不同的OLTP数据库的数据
数据处理时间 通常较短 可能较长
查询复杂度 查询操作相对简单 查询操作可以很复杂
数据库设计 通常采用第三范式(3NF)设计,避免数据冗余 通常采用反三范式设计,面向分析型应用,准备数据仓库
数据完整性要求 对数据完整性要求很高,必须采用完整性约束 不对业务过程负责,数据不会频繁修改,所以没有完整性约束
  1. 什么是 Redis?

  2. Redis的特点是什么?

  3. Redis的数据结构有哪些?

  4. Redis的发布与订阅功能是什么?

  5. Redis事务如何实现?

  6. Redis最与众不同的数据结构式什么?有什么特点?

  7. Redis如何快速实现过期?

  8. 请描述一个实际应用场景,说明为什么选择使用 Redis数据库。

  9. 请简要介绍一下Cassandra是什么,以及它的主要特点是什么?

  10. Cassandra与传统关系型数据库的主要区别是什么?

  11. 什么是Cassandra的复制策略?如何配置数据的复制和分布?

  12. Cassandra的数据删除是如何工作的?有没有什么需要注意的地方?

  13. Cassandra数据库中使用哪种查询语言?

  14. Cassandra的设计目标是什么?

  15. Cassandra的主要成分是什么?

  16. 请描述一个实际应用场景,说明为什么选择使用 Cassandra数据库?