Back

数据库类型概述

会SQL≠会数据库

前言

我们从一个不等式开始:会SQL≠会数据库

SQL是结构化查询语言(Structured Query Language)的缩写,用来访问和操作关系型数据库系统。

这里出现了两个概念,分别是:关系型、数据库系统。

什么是数据库系统(DataBase System)?什么叫关系型?还有非关系型?

数据库系统=数据库+硬件+软件+人

  • 数据库:数据库(DataBase),是按照数据结构来组织、存储和管理数据的仓库。
  • 硬件:构成计算机系统的各种物理设备。
  • 软件:包括操作系统、数据库管理系统及应用程序。数据库管理系统(Database Management System,DBMS)是数据库系统的核心软件,科学地组织和存储数据,高效获取和维护数据。
  • 人:广义上讲包括四类,这里只说数据库管理员(Data Base Administrator,DBA)。

既然我们使用DBMS来管理数据库,现在眼前有两种选择:关系型数据库SQL 数据库)和非关系型数据库No SQL 数据库)。

关系型数据库

关系型数据库使用 SQL,来编写数据库查询和数据库进行通信。查询可以是用于执行任何 CRUD(创建、读取、更新、删除)操作的命令。

关系数据库以结构化和表的方式存储数据。也就是说,它将信息存储在中,可以将其视为数据的存储容器。

关系数据库具有严格的、静态的预定义逻辑架构(schema)。可以将数据库架构视为一个组织蓝图——一组规则:哪些可以插入表、哪些不能插入表、以及如何设置数据。

在每个表中,至少有一个列(column)。这些列具有特定的数据类型,例如 INTEGERVARCHAR

一个表也会包含**行(rows)**或 记录(records)。记录是遵守预定义架构的单个数据条目。本质上,它是一个数据项。

此外,一个关系数据库可以有多个表,这些表可以是相互关联的。关系数据库有一个主键,它作为标识符,确保表中的每一项都是唯一的,从而确保表中没有重复和冗余的数据。外键 用于表示在表之间的关系,比如1:1、1:n或者是n:n。

关系数据库提供 ACID 数据一致性模型。原子性(Atomicity)、一致性(Consistency)、事务隔离(Isolation)、持久性(Durability)。

原子性意味着事务是原子的并且采取 “all or nothing” 的方法。也就是,要么整个操作成功,从头到尾完成,要么不成功,整个操作“回滚”。所有操作都保证以成功或失败结束,不存在部分成功。

一致性是确保数据库结构从事务开始到结束保持不变。一致性确保进入数据库的任何数据都遵循已设置的规则和约束。它可以保护和维护关系数据库中数据的完整性。

事务隔离意味着尽管在任何时候都发生了许多事务,但每个事务都被视为一个原子的、独立的单元,并且事务似乎是按顺序发生的。

例如,如果两个事务同时发生,此属性可确保一个事务以及那里发生的更改不会以任何方式影响另一个事务。

最后,持久性意味着事务的任何结果和更改都已提交,因此是永久性的,并且将持续存在,即使出现系统故障也是如此。

ACID 模型可确保数据库可靠且安全。

非关系数据库

非关系数据库都是指不使用关系数据模型的数据库。无论是“Not only SQL”还是“Non-SQL”。

非关系数据库不以表格式存储和组织数据。不同数据点之间没有表、行、列或关系。数据存储在集合中。数据库通常是非结构化的并使用动态架构。

1、键值(Key-Value)存储

键-值数据库是最简单的非关系数据库类型之一。数据以键值对集合的形式存储在字典或哈希表中。这种类型的数据库具有唯一的键。键充当指向特定值的指针并与该值相关联。分配给键的值可以是任何信息和数据类型。要检索和访问该值,请使用唯一键作为引用。

优点:查询快
缺点:数据无结构化,通常只被当做字符串和二进制数据存储
应用场景:内容缓存、用户信息(会话、配置信息、购物车等),主要处理大量数据的高访问负载
代表:Redis、Memcached

2、文档(Document-Oriented)存储

面向文档的数据库也以键值对的方式存储数据。但是其值是一个文档,它有一个唯一的键作为它的标识符。文档可以是任何格式,例如 XML、YAML 或二进制,通常采用 JSON 格式。这种类型的数据库以半结构化的方式存储数据。没有架构或预定义的结构。正因为如此,它更灵活,可以在项目需求发生变化时重新安排和重新设计数据库结构。它还提供了类似 SQL 的查询语言或者通过 API 来对数据执行查询以及 CRUD 操作。

优点:数据结构要求不严格,表结构可变
缺点:查询性能不高,缺乏统一的查询语法
应用场景:日志、Web应用
代表:Mongdb、CouchDB

3、列(Wide Column Store/Column-Family)存储

列式数据库在概念上类似于关系数据库,但它们使用组或列集(也称为列族)而不是行来逻辑组织相关数据。可以通过使用与单个列关联的唯一行键来独立访问列族。列式数据库搜索特定数据的速度很快,因为无需通过不相关的信息行来查找要搜索的内容。

优点:列存储查找速度快,可扩展行强,更容易进行分布式扩展,适用于分布式的文件系统,应对分布式存储的海量数据
缺点:查询性能不高,缺乏统一的查询语法
应用场景:日志、分布式文件系统(对象存储)、时空数据、推荐画像、消息/订单等。
代表:Cassandra、Hbase

4、图形(Graph-Oriented)存储 特点:图数据库是最复杂的非关系数据库类型,它们可以处理大量数据。图数据库专注于数据元素之间的连接和关系,并使用图论来存储、搜索和管理这些关系。图数据库使用 nodes 来存储数据,用 nodes 表示单个实体或数据。一个节点连接到另一个节点。为了表示实体之间的连接或关系,图数据库还用到了 edges

优点:图形相关算法。比如最短路径寻址,N度关系查找等
缺点:有时需要对整个图计算才能得出需要信息,分布式的集群方案不好做,处理超级节点乏力,没有分片存储
应用场景:社交网络、推荐系统等。专注于构建关系图谱。
代表:Neo4j、Infinite Graph

非关系数据库提供 BASE 数据库一致性模型。该模型不像关系数据库的 ACID 模型那样严格。

BASE 是以下的首字母缩写词:

  • Basic Availability 基本可用,该模型不关注数据的即时一致性。但是,该系统在持续工作,并始终保证数据的可用性。
  • Soft 软状态,由于缺乏即时一致性,系统的状态可能会随着时间而改变。软状态意味着系统不需要写一致性。
  • Eventual 最终一致性,主要优先事项是数据的持续可用,而不是数据一致性。但是,最终在某个时候,可以期望数据是一致的。当系统停止接收输入时,可能会发生这种情况。

二者对比

SQL数据库

  • 需要分布在多个表中的高度结构化的数据,需要数据遵守严格的、可预测的、预定义的和已经计划好的模式。
  • 数据将保持相对不变。如果不打算频繁更改数据库的结构并且不需要定期更新项目,SQL 数据库会很方便。请记住,它们提供的灵活性很小。
  • 需要一致的数据。
  • 数据完整性和安全性是重中之重。
  • 需要复杂查询的准确结果。

SQL 数据库的一个缺点是它们是垂直扩展的。当存储变多时,需要增加当前机器上的硬件和提高计算能力。这可能代价高昂。需要增加处理能力和内存存储来处理增加的负载以提高性能。

但是SQL可以确保数据的完整性和一致性,并且快速查询。

NoSQL 数据库

  • 在一个快速的开发环境中工作,需要经常调整需求并不断更改数据库结构。
  • 正在处理大量性质不同但不需要大量结构或准确性的数据。
  • 正在处理需要频繁更新的数据。NoSQL 数据库提供了一个松散、灵活和动态的模式,允许对数据进行定期更改。
  • 需要快速的查询结果和系统的持续可用性。
  • 不想对数据库进行任何前期规划、准备或设计,而是想立即开始构建。

NoSQL 数据库的一大优势是它们可以水平扩展。它们的设计方式可以将更多机器添加到现有机器(例如云服务器)中。与需要额外 CPU(中央处理单元)或 RAM(随机存取存储器)资源的垂直缩放相比,这种行为更可取。

但当然,NoSQL 数据库的一个缺点是它们不能确保数据的完整性和一致性。

分析型数据库

我们根据数据库存储数据的模式,将它们分为关系型和非关系型。而根据数据库的作用,我们还可以划出另一种分类方式:分析型数据库

分析数据库是面向分析应用的数据库,与传统的数据库不同,它可以对数据进行在线统计、数据在线分析、即时查询等,从而发掘数据的价值信息。

OLTP(OnLine Transaction Processing);OLTP 是能够提供实时在线处理事务,同时保证实时强一致性的关系型数据库,也称交易型数据库。开源产品有:MySQL、PostgreSQL。可以理解成传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。

OLAP(Online Analytical Processing):OLAP 是指支持对大规模数据进行较为复杂的联机分析处理的关系型数据库。开源产品有:Greenplum、Doris、Clickhouse、Kylin、Impala、Sparksql、Druid、Hive、Presto。是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

HTAP (Hybrid Transactional/Analytical Processing):HTAP 是指能够同时支持在线事务处理和复杂数据分析的关系型数据库。广义的 HTAP 指的是同时支持 OLTP 和 OLAP 查询的数据库,而狭义的 HTAP 指的是同时支持行存列存 OLTP 和 OLAP 查询的数据库。

Licensed under CC BY-NC-SA 4.0
Built with Hugo
Theme Stack designed by Jimmy
© Licensed Under CC BY-NC-SA 4.0