架构师备考-非关系型数据库

基础理论

CAP 理论

  • C(Consistency)一致性。一致性是指更新操作成功并返回客户端完成后,所有的节点在同一时间的数据完全一致,与ACID 的 C 完全不同。
  • A (Availability)可用性。可用性是指服务一直可用,而且是正常响应时间
  • P(Partition tolerance)分区容错性。分区容错性是指分布式系统在遇到某节点或网络区分故障的时候,仍然能够对外提供满足一致性和可用性的服务。
  • CA:优先保证一致性和可用性,放弃分区容错性。
    • 缺点:不再是分布式系统
  • CP:优先保证一致性和分区容错性,放弃可用性。
    • 缺点:牺牲用户体验
  • AP:优先保证可用性和分区容错性,放弃一致性。
    • 全局数据的不一致性

BASE 理论

  • 基本可用(Basically Available):指分布式系统在出现不可预知故障的时候,允许牺牲部分可用性。允许分区失败的情形出现
  • 软状态(soft state)
    • 硬状态:数据库状态一直保持数据库一致性
    • 软状态:状态可以有一段时间不同步
  • 最终一致性(Eventuallyconsistent):系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。

NOSQL 特点

NOSQL 数据库的主要特点包括:易拓展、高性能处理大数据量的数据、灵活的数据模型、高可用

  • 易拓展:去掉了关系数据库的关系型特性。数据之间无关系,这样就非常容易扩展。
  • 大数据量,高性能:NoSQL 数据库都具有非常高的读写性能,尤其在大数据量下。这得益于它的无关系性,数据库的结构简单。
  • 灵活的数据模型:NoSQL 无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式
  • 高可用:NoSQL 在不太影响性能的情况下,就可以方便的实现高可用的架构,有些产品通过复制模型也能实现高可用。

NOSQL与SQL 比较

|-------|---------|-----------|
| 特征 | SQL 数据库 | NOSQL 数据库 |
| 数据类型 | 结构化 | 非结构化 |
| 数据一致性 | 强一致性 | 弱一致性 |
| 事务 | 高事务性 | 弱事务性 |
| 拓展性 | 一般 | 好 |
| 数据容量 | 有限数据 | 海量数据 |
| 标准化 | 是 | 否 |
| 技术支持 | 高 | 低 |
| 可维护性 | 复杂 | 复杂 |

NOSQL 体系框架

  • NOSQL 分为 4层,分别是数据持久层、数据分布层、数据逻辑模型层、接口层
  • 数据持久层:定义了数据的存储形式
    • 内存:最快,但可能造成数据丢失
    • 硬盘:保存很久,但存取慢于内存
    • 内存和硬盘接口
    • 定制可插拔:保证了数据存取具有较高的灵活性
  • 数据分布层:定义了数据是如何分布的
    • CAP 支持,可用于水平拓展
    • 多数据中心支持,可以保证在横跨多数据中心时也能够平稳运行
    • 动态部署支持,可以在运行着的集群中动态地添加或删除节点
  • 数据逻辑模型层:数据的逻辑表现形式
  • 接口层:为上层应用提供了方便的数据调用接口
    • Rest:一种软件架构风格,它定义了一组用于分布式系统的架构原则
    • Thrift:一个由Apache开发的跨语言的服务部署框架
    • Map/Reduce:一种编程模型,用于大规模数据集(大规模数据集)的并行运算
    • Get/Put:Get/Put 是一种简单的键值存储操作接口,其中"Get"用于检索数据,"Put"用于存储数据
    • 特定语言API:许多NoSQL数据库为特定编程语言提供了专用的API

NOSQL 适用场景

  • 数据模型比较简单
  • 需要灵活性更强的IT 系统
  • 对数据库性能要求较高
  • 不需要高度的数据一致性
  • 对于给定key,比较容易映射复杂值的环境

NOSQL 数据库分类

NOSQL 数据库主要分为4类,分别是:键值对数据库、列式存储数据库、文档型数据库、图数据库

键值对数据库

  • 键值存储的典型数据结构一般为数据链表:先通过Hash 算法得出 Hashcode,找到数组的某一个位置,然后插入链表。
  • 这类数据库主要会用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据。
  • Key-Value 模型对于IT 系统来说,其优势在于简单、易部署。但是如果数据库管理员只对部分值进行查询或更新的时候,Key-Value 就显得效率低下了。
  • 典型应用
    • 涉及频繁读写、拥有简单数据模型的应用
    • 内容缓存、比如会话配置文件、参数、购物车等
    • 存储配置和用户信息的移动应用
  • 优点:拓展性好、灵活性好、大量写操作时性能高
  • 缺点:无法存储结构化信息,条件查询效率较低
  • 相关产品:redis、Memcached

列式存储数据库

  • 列式数据库是按数据库记录的列来组织和存储数据的,数据库中每个表由一组页链的集合组成,每条页链对应表中的一个存储列。
  • 这类数据库通常用来应对分布式存储的海量数据。键仍然存在,但是他们的特点是指向了多个列。这些列是由列家族来安排的。
  • 典型应用
    • 数据分析:列式数据库非常适合进行数据分析和数据仓库应用,尤其是涉及大量聚合操作的场景。
    • 大数据处理:用于处理大规模分布式数据集,如日志分析、用户行为分析等。
    • 实时查询:在需要快速响应的实时分析系统中,列式数据库可以提供高效的查询性能。
    • 分布式存储:在需要高可用性和容错能力的分布式系统中,列式数据库因其设计而具有优势。
  • 优点:
    • 查询性能:对于读取大量数据中的少数几列的场景,列式数据库可以显著提高查询性能,因为它只需要读取相关的列而不是整行数据。
    • 压缩率高:由于同一列的数据类型相同,列式数据库通常可以实现更高的数据压缩率,从而减少存储空间和I/O操作。
    • 可扩展性:列式数据库通常设计为分布式系统,易于水平扩展,可以处理不断增长的数据量。
    • 容错性:许多列式数据库支持数据复制和分区,提高了系统的容错能力和可用性。
  • 缺点:
    • 写入性能:由于数据是按列存储的,对于涉及多列的写入操作,列式数据库可能不如行式数据库高效。
    • 事务支持:大多数列式数据库不支持复杂的事务操作,这对于需要强事务一致性的应用来说可能是一个限制。
    • 数据更新:对于频繁的数据更新操作,列式数据库可能不如行式数据库高效,因为更新操作可能需要重写整列数据。
    • 复杂查询:虽然列式数据库在聚合查询方面表现优异,但对于涉及多表连接的复杂查询,其性能可能不如行式数据库。
  • 相关产品:Apache Cassandra、Apache HBase、Google Bigtable

文档型数据库

  • 该类型的数据模型是版本化的文档,半结构化的文档以特定的格式存储,比如JSON。文档型数据库可以看作是键值数据库的升级版,允许嵌套键值,在处理网页等复杂数据时,文档型数据库比传统键值数据库的查询效率更高。
  • 典型应用:存储、索引并管理面向文档的数据或者类似的半结构化数据。比如用于后台具有大量读写操作的网站、使用JSON 数据结构的应用、使用嵌套结构等非规范化数据的应用程序
  • 优点:
    • 性能好(高并发)、灵活性高、复杂度低、数据结构灵活
    • 提供嵌入式文档功能,将经常查询的数据存储在同一个文档中。既可以根据键来构建索引,也可以根据内容构建索引
  • 缺点:缺乏统一的查询语法
  • 相关产品:MongoDB、Lucene、Elasticserach

图数据库

  • 图形结构的数据库同其他采用行列以及刚性结构的SQL 数据库不同,它使用灵活的图形模型,并且能够拓展到多个服务器上。

  • NOSQL 没有标准的查询语言,因此进行数据库查询需要指定数据模型。

  • 许多NoSQL 数据库都有REST 式的数据接口或者查询API。适合存储通过图进行建模的数据,列如社交网络数据、生物信息网络数据、交通网络数据等。

  • 典型应用:专门用于处理具有高度相互关联关系的数据,比较适合于社交网络、模式识别、依赖分析、推荐系统以及路径寻找等问题

  • 优点:灵活性高、支持复杂的图形算法、可用于构建复杂的关系图谱

  • 缺点:复杂度高、只能支持一定的数据规模

  • 相关产品:Neo4J、InfoGrid、Infinite Graph

相关推荐
warrah几秒前
redis——岁月云实战
数据库·redis·缓存
秀儿y1 分钟前
Redis-十大数据类型
数据库·redis·缓存·oracle
凡人的AI工具箱21 分钟前
每天40分玩转Django:Django类视图
数据库·人工智能·后端·python·django·sqlite
路在脚下@25 分钟前
MySQL的索引失效的原因有那些
数据库·mysql
凡人的AI工具箱31 分钟前
每天40分玩转Django:实操图片分享社区
数据库·人工智能·后端·python·django
CT随36 分钟前
MongoDB
数据库·mongodb
Fool丶玄浅1 小时前
【数据库系统概论】—— 关系数据库
数据库·数据库系统
DashVector2 小时前
如何通过HTTP API检索Doc
数据库·人工智能·http·阿里云·数据库开发·向量检索
SEO-狼术2 小时前
Enhance Security in Software Crack
数据库
计算机毕设定制辅导-无忧学长3 小时前
Redis 初相识:开启缓存世界大门
数据库·redis·缓存