date: 2024-07-04
title: NoSQL-Assignment
status: DONE
author:
- AllenYGY
tags:
- Assignment
- NoSQL
- DataBase
publish: True
NoSQL-Assignment
键值存储(Key-Value Stores):
文档存储(Document Stores):
列存储(Column Stores):
图形数据库(Graph Databases):
类别 | 关系型数据库(RDBMS) | NoSQL数据库 |
---|---|---|
数据模型 | 基于关系模型,数据以表格形式存储,表格由行和列组成,通过外键与其他表格建立关系。 | 不基于关系模型,数据存储方式多样,如键值对、文档、列或图形。 |
模式Schema | 需要预先定义模式,数据结构固定,对数据的变更需要修改模式。 | 通常不需要预先定义模式,数据结构灵活,易于适应数据的变化。 |
扩展性 | 扩展性有限,通常通过垂直扩展(增加单个服务器的资源)来提升性能。 | 设计之初就考虑了水平扩展,通过增加更多的服务器来提升性能和存储能力。 |
一致性 | 通常遵循ACID原则(原子性、一致性、隔离性、持久性),保证事务的强一致性。 | 通常遵循CAP理论,提供最终一致性,牺牲一定的一致性以获得更好的可用性和分区容错性。 |
查询语言 | 使用SQL(结构化查询语言)进行数据查询和操作。 | 使用自定义的查询语言或API,不是SQL。 |
事务处理 | 支持复杂的事务处理,包括多表事务。 | 事务处理能力有限,许多NoSQL数据库不支持跨文档或跨键的事务。 |
数据存储 | 数据存储在单一的数据库服务器上,通常使用B树或其他索引结构来优化查询。 | 数据可能分布在多个服务器上,根据其类型使用不同的存储和索引机制。 |
使用场景 | 适用于需要复杂查询、事务处理和数据一致性的应用,如金融、会计系统。 | 适用于需要高扩展性、处理大量非结构化数据或快速迭代开发的应用,如大数据分析、实时推荐系统。 |
性能 | 在小规模数据集上提供高性能,但在大规模数据集上可能遇到性能瓶颈。 | 在大规模数据集上提供高性能,但在小规模数据集上可能不如关系型数据库高效。 |
是由计算机科学家埃里克·布鲁尔在2000年提出的一个概念,用来描述分布式系统在设计时需要做出的权衡。
在分布式系统中,当一个数据项更新后,所有节点应保证对该数据项的读取都将得到更新后的值。也就是说,如果一个节点更新了数据,其他节点在读取时也应该得到这个最新的数据。
系统在任何时候都能够响应客户端的请求。即使在部分节点失败的情况下,系统仍然能够提供服务。
系统在网络分区(即网络中的一部分节点无法与其他节点通信)的情况下仍然能够继续运行。
CAP定理的核心观点是,在任何给定时间,一个分布式系统最多只能同时满足上述三个特性中的两个。这意味着设计者必须在这三个特性中做出选择:
高可用性是指系统在面对硬件故障、软件故障、网络问题或其他问题时,仍能继续运行并提供服务的能力。在NoSQL数据库中,高可用性通常通过以下方式实现:
副本:数据在多个节点上进行复制,以便在主节点故障时,其他副本可以接管服务。
故障转移:系统能够自动检测到节点故障,并迅速将请求重定向到健康的节点。
冗余:通过在不同的物理位置或服务器上存储数据副本,减少单点故障的风险。
可扩展性是指系统能够通过增加资源(如服务器、存储或处理能力)
来应对增长的工作负载。NoSQL数据库的可扩展性通常分为两种:
分布式系统是由多个物理或逻辑上分离的计算机组件组成的系统,这些组件通过网络相互连接和通信,协同工作以完成复杂的任务。在NoSQL数据库的上下文中,分布式系统的特点包括:
数据分布:数据被分割并存储在多个节点上,以实现负载均衡和冗余。
网络通信:节点之间通过网络进行数据交换和协调。
容错性:系统设计能够处理节点或网络的故障,确保整体服务的连续性。
一致性:尽管数据分布在多个节点上,系统仍需保证数据的一致性,可能是强一致性或最终一致性。
并发控制:系统需要管理多个用户或进程同时对数据进行读写操作,避免冲突和数据损坏。
数据库类型 | 特点 | 例子 |
---|---|---|
键值存储 | - 简单性:模型简单,易于理解和实现。 - 高性能:读写速度快,因为数据通过键直接访问。 - 灵活性:值可以是任何数据类型,包括字符串、数字、二进制数据等。 - 扩展性:易于水平扩展,通过增加节点来提高性能和容量。 |
Redis, Riak |
列存储 | - 优化写入:因为只有列的一部分需要更新,所以写入操作更高效。 - 列式查询:查询特定列时性能更高,因为只需要读取和处理需要的列。 - 可扩展性:易于水平扩展,可以通过增加节点来扩展存储容量。 |
Cassandra, HBase |
文档数据库 | - 灵活性:文档可以包含复杂的嵌套结构,适应不断变化的数据模型。 - 自描述性:文档包含其结构的元数据,无需预先定义模式。 - 丰富查询:支持对文档内嵌套数据的查询。 |
MongoDB, CouchDB |
图形数据库 | - 关系导向:专注于存储和查询实体之间的关系。 - 灵活的查询:支持复杂的关系查询,如最短路径、社区检测等。 - 高效的遍历:优化了图遍历操作,可以快速找到关系路径。 |
Neo4j, OrientDB |
a. 实时分析:
适用数据库:列族数据库(如Canssandra)
原因:优化了时间戳索引和快速的数据插入与查询,适合实时数据的收集和分析。全文搜索引擎则提供了强大的文本处理和搜索能力,适合实时日志分析和监控。
b. 大数据处理:
适用数据库:列存储数据库(如Cassandra, HBase) 或 文档数据库(如MongoDB)。
原因:列存储数据库优化了列的读写操作,适合处理大规模数据集,特别是在需要快速列查询的场景。文档数据库则因其灵活性和丰富的查询功能,适合处理结构化或半结构化的大数据。
c. 社交网络:
适用数据库:图形数据库(如Neo4j, OrientDB)。
原因:社交网络中存在大量的用户关系和交互数据,图形数据库能够高效地存储和查询这些复杂的关系,支持社交网络中的好友关系、社交图谱分析等。
d. 物联网 (IoT):
适用数据库:键值数据库(如Redis) 或 文档数据库(如MongoDB)。
原因:物联网设备产生大量的非结构化,时序数据库可以高效地存储和查询这些数据。同时,物联网数据通常是半结构化的,文档数据库的灵活性使其成为处理这类数据的理想选择。
实际应用场景:社交媒体平台
应用描述:
一个社交媒体平台允许用户创建个人资料、发布状态更新、分享图片和视频、关注其他用户以及参与评论和点赞等社交互动。
OPTIONAL MATCH 会搜索可能存在也可能不存在的描述模式,并将模式中不存在的标识符赋值为 NULL。
// 创建 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)
英文全称是 Online Transaction Processing System,在线事务处理系统
可以理解为日常的业务系统,比如像 ERP、OA、CRM 等等,这些业务系统主要是管理企业的基本业务流程,对数据的处理方式主要是以增、删、改为主
英文全称是 Online Analytical Processing System,在线分析处理系统
可以理解为分析型系统,比如在商业智能BI应用中,支撑到前端可视化分析的数据仓库
特性 | OLTP(联机事务处理) | OLAP(联机分析处理) |
---|---|---|
数据处理类型 | 以增删改处理为主 | 以查询操作为主 |
数据来源 | 业务系统中直接产生的数据 | 来自不同的OLTP数据库的数据 |
数据处理时间 | 通常较短 | 可能较长 |
查询复杂度 | 查询操作相对简单 | 查询操作可以很复杂 |
数据库设计 | 通常采用第三范式(3NF)设计,避免数据冗余 | 通常采用反三范式设计,面向分析型应用,准备数据仓库 |
数据完整性要求 | 对数据完整性要求很高,必须采用完整性约束 | 不对业务过程负责,数据不会频繁修改,所以没有完整性约束 |
什么是 Redis?
Redis的特点是什么?
Redis的数据结构有哪些?
Redis的发布与订阅功能是什么?
Redis事务如何实现?
Redis最与众不同的数据结构式什么?有什么特点?
Redis如何快速实现过期?
请描述一个实际应用场景,说明为什么选择使用 Redis数据库。
请简要介绍一下Cassandra是什么,以及它的主要特点是什么?
Cassandra与传统关系型数据库的主要区别是什么?
什么是Cassandra的复制策略?如何配置数据的复制和分布?
Cassandra的数据删除是如何工作的?有没有什么需要注意的地方?
Cassandra数据库中使用哪种查询语言?
Cassandra的设计目标是什么?
Cassandra的主要成分是什么?
请描述一个实际应用场景,说明为什么选择使用 Cassandra数据库?