数据库blog5_数据库软件架构介绍(以Mysql为例)
🌿软件的架构
🍂分类
软件架构总结为两种主要类型:一体式架构和分布式架构
● 一体化架构
一体式架构是一种将所有功能集成到一个单一的、不可分割的应用程序中的架构模式。这种架构通常是一个大型的、复杂的单一应用程序,包含所有功能模块。
特点
简单:部署简单,不需要复杂的分布式系统管理。
性能优化:由于所有组件都在同一个进程中运行,通信效率高。
可维护性差:代码库庞大,难以维护和扩展。
扩展性差:难以水平扩展,通常需要垂直扩展(增加硬件资源)。
● 分布式架构
分布式架构是一种将应用程序分解为多个独立的组件或服务,并将这些组件或服务部署在不同的服务器或节点上的架构模式。分布式架构可以进一步细分为多种具体模式,如C/S架构、B/S架构、微服务架构等。
特点
高可维护性:各组件可以独立开发和测试,便于维护。
高可扩展性:可以通过增加服务器数量或优化服务器性能来扩展。
灵活性:可以使用不同的技术栈开发不同的组件。
复杂性:部署和管理相对复杂,需要处理网络通信、数据一致性等问题。
○ 分布式架构————C/S端架构
客户端(Client)是指与服务器端(Server)进行交互的软件或应用程序。客户端可以是专门为服务器端设计的,也可以是通用的软件,具体取决于应用场景和需求。
专用客户端
:这些客户端是专门为某个特定的服务器端应用程序设计的,通常具有丰富的功能和优化,以提供最佳的用户体验。)例如,数据库管理工具(如MySQL Workbench)、企业级的ERP客户端等。)通用客户端
:这些客户端是通用的软件,可以通过连接器或中间件与多种服务器端应用程序进行交互。(例如,Web浏览器、通用的API客户端工具(如Postman)等。)C(客户端)/S(服务器端)架构,S端是核心,C端负责交互和请求发起,以及展示服务器端的返回结果
- C端
`定义:`客户端是用户与系统交互的界面,负责接收用户输入、显示结果,并向服务器端发送请求。 `功能:`用户界面:提供用户交互界面,如图形用户界面(GUI)或命令行界面(CLI)。请求生成:根据用户输入生成请求,并将其发送到服务器端。结果展示:接收服务器端返回的结果,并将其展示给用户。本地处理:在某些情况下,客户端可能 会进行一些本地处理,如数据缓存、输入验证等。
- S端
`定义:`服务器端是系统的后端,负责处理客户端的请求,并返回结果。 `功能:`请求处理:接收客户端的请求,解析请求内容,并进行相应的处理。数据管理:管理数据存储、查询、更新等操作。业务逻辑:实现系统的业务逻辑,如数据验证、事务处理等。资源管理:管理系统的资源,如内存、磁盘、网络等。
从广义上来说,B/S(浏览器/服务器)架构和P2P(对等网络)架构都可以看作是C/S(客户端/服务器)架构的变体。
○ 客户端与服务器端的两种架构
本地C端 + 本地S端
在这种架构中,客户端和服务器端都运行在同一台计算机上。客户端通过本地通信机制与服务器端进行交互。
通信方式
- 通过本地通信机制
共享内存:多个进程共享同一块内存区域,用于快速数据交换。 消息队列:一个进程向队列中写入消息,另一个进程从队列中读取消息。 管道(Pipe):一种半双工的通信方式,数据只能单向流动。 套接字(Socket):一种通用的进程间通信机制,支持不同主机上的进程之间的通信。在本地环境下,可以使用Unix Domain Socket来实现高效的进程间通信。 远程过程调用(RPC):允许一个程序(客户端)调用另一个程序(服务器端)中的过程或函数,就像调用本地函数一样。
- 通过网络层通信
TCP/IP协议栈:包括传输控制协议(TCP)和互联网协议(IP),用于可靠的数据传输。 HTTP/HTTPS协议:用于客户端(如浏览器)与服务器之间进行超文本传输。HTTPS是HTTP的安全版本,通过SSL/TLS加密来保护数据传输的安全。 其他协议:如FTP(文件传输协议)、SMTP(简单邮件传输协议)等,用于特定类型的网络通信。
本地C端 + 远程S端
客户端和服务器端通过网络进行通信,支持跨主机、跨网络的交互。
通信方式————通过网络层通信TCP/IP协议栈:包括传输控制协议(TCP)和互联网协议(IP),用于可靠的数据传输。 HTTP/HTTPS协议:用于客户端(如浏览器)与服务器之间进行超文本传输。HTTPS是HTTP的安全版本,通过SSL/TLS加密来保护数据传输的安全。 其他协议:如FTP(文件传输协议)、SMTP(简单邮件传输协议)等,用于特定类型的网络通信。
数据传输格式:
JSON(JavaScript Object Notation):一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成。 XML(可扩展标记语言):一种标记语言,用于标记电子文件使其具有结构性。 二进制格式:如Protocol Buffers(由Google开发的一种语言无关、平台无关的数据序列化方法),用于高效的数据传输。
🌿数据库软件
即数据、数据库和数据库管理系统组成的数据库软件,而人使用维护组成了数据库系统。所以,我们单纯的讨论数据库软件时,指的是数据、数据库、数据库管理系统,而非数据库系统。
🍂数据库架构图
由图可知,软件分为客户端与S端,其中C端和S端都可以看作软件,由此客户端也有自己的完整设计,只是功能是与服务器交互。服务器则负责了核心功能,可以看到,它包含了相关工具、存储引擎以及其它核心内容。这里不一一说明了。把C/S看作两个软件就好。
数据库可以独立于数据管理软件进行存储。
数据库的核心功能是数据的存储和管理,但数据的实际存储方式和位置可以灵活配置。- C端可以与S端分开存在
- 除了专门的连接数据库的专门客户端(如,Mysql Client、navicat…)其它软件也可以连接到数据库服务器端。它们靠连接器(JDBK)、中间件或者其它软件作为中介来与数据库服务器端交互。(其中专门的客户端也是配备了连接器的)
🍂数据库的客户端
客户端,简言之,能和数据库交互的关键在于连接器。数据库专门客户端分为命令行界面 和 图形化界面。此外,还有第三方的数据库客户端,所以也可以看出关键在于连接器。
特点用户界面:提供用户交互界面,如图形用户界面(GUI)或命令行界面(CLI)。
请求生成:根据用户输入生成SQL语句或其他数据库操作请求,并将其发送到服务器端。
结果展示:接收服务器端返回的查询结果,并将其展示给用户。
本地处理:在某些情况下,客户端可能会进行一些本地处理,如数据缓存、输入验证等。注意:
- 一个客户端可以连接多个服务器端
- 客户端使用时要打开
- 客户端类型
- 专用客户端:通常会直接配备连接器,以便与服务器端进行高效、优化的通信。在某些情况下,也会通过中间件与服务器端交互,以利用中间件提供的额外功能。
- 通用客户端:通常会使用连接器或中间件与服务器端进行交互。通用客户端的设计目标是兼容多种服务器端应用程序,因此通常会通过中间件来提高通用性和灵活性。
🍂数据库的服务器端
服务器端,即数据库软件的核心,注意,服务器端指的不是服务器,而是服务器上的一个软件。即一个服务器上,可以运行多个服务器端软件(如,web服务器端、邮件服务器端、数据库服务器端),同时也可以有多个不同类型的数据库的服务器端(如,Mysql、redis服务器端)
注意:
- 一个数据库服务器端可以同时与多个客户端(本质:连接器)连接
- 服务器端使用时候也要打开(这就是为啥学习Mysql时候使用时要先数据命令打开数据库服务器端(CMD:net start mysql)
● 组成软件之一————存储引擎
- 存储引擎负责管理数据的物理存储和检索。它决定了数据如何存储在磁盘上,如何进行索引,以及如何高效地读取和写入数据。
存储引擎是数据存储结构的实现关键:
存储引擎是数据存储结构实现的关键。存储引擎负责管理数据的物理存储和检索,决定了数据如何存储在磁盘上,如何进行索引,以及如何高效地读取和写入数据。它是数据库系统中负责数据存储和检索的核心组件功能:
数据存储:将数据持久化存储到磁盘。
数据检索:高效地读取数据。
索引管理:创建和管理索引,以加速查询。
事务管理:支持事务的ACID(原子性、一致性、隔离性、持久性)特性。
并发控制:管理多个用户对数据的并发访问。存储引擎介绍
数据库系统 存储引擎 支持事务 锁类型 适用场景 其他特点 MySQL InnoDB 是 行级锁 高并发和事务支持的场景 支持外键,高性能读写操作 MySQL MyISAM 否 表级锁 读多写少的场景 查询速度快,支持全文索引 MySQL MEMORY 否 表级锁 临时数据存储和高速缓存场景 数据存储在内存中,访问速度快 PostgreSQL 默认引擎 是 行级锁 复杂查询和事务支持的场景 强大的事务支持和并发控制 SQLite 默认引擎 是 表级锁 小型应用和开发环境 轻量级嵌入式数据库 MongoDB WiredTiger 是 文档级锁 高性能和并发支持的场景 支持压缩,减少存储空间 MongoDB MMAPv1 是 集合级锁 读多写少的场景 使用内存映射文件进行数据存储 Cassandra 默认引擎 是 分布式锁 大规模数据存储和高并发访问 分布式架构,高可用性和水平扩展
● 组成软件之一————查询处理器
查询处理器负责解析和执行SQL语句,将用户的查询请求转换为数据库可以理解的操作。
功能:
SQL解析:将SQL语句解析为内部的查询计划。
查询优化:优化查询计划,以提高查询效率。
执行引擎:执行查询计划,返回查询结果。
● 组成软件之一————事务管理器
事务管理器负责管理事务的ACID特性,确保数据的一致性和完整性。
功能:
事务控制:管理事务的开始、提交和回滚。
锁管理:管理数据的锁,以实现并发控制。
日志管理:记录事务日志,用于恢复和回滚。
● 组成软件之一————存储管理
存储管理负责管理数据库的物理存储,包括文件系统、磁盘空间等。
功能:
文件管理:管理数据文件和日志文件。
空间管理:管理磁盘空间的分配和回收。
备份和恢复:提供数据备份和恢复功能。
🍂数据库的连接器/其它软件
想让自己开发的软件连接到数据库,就要使用对应的连接器或者其它软件(如,中间件)
如果不使用专门的客户端(客户端自带连接器),就要自己给自己的软件配置连接器或者其它软件才可以与数据库服务器端连接。
数据库连接器
(也称为数据库驱动程序)是客户端与数据库服务器之间通信的桥梁。它负责建立和管理连接,发送请求,接收响应等。
- 特点
- 建立连接:负责初始化与数据库服务器的网络连接。
- 发送请求:将客户端的请求(如SQL语句)转换为数据库服务器能够理解的格式,并通过网络发送给服务器。
- 接收响应:接收数据库服务器返回的结果,并将其转换为客户端能够理解的格式。
- 管理连接:负责管理连接的生命周期,包括连接的打开、关闭、超时处理等。
连接器和其它软件总结
- 数据库连接器:是客户端与数据库服务器之间通信的桥梁,负责建立和管理连接,发送请求,接收响应等。
- 专用客户端:通常会直接配备连接器,以便与服务器端进行高效、优化的通信。在某些情况下,也会通过中间件与服务器端交互,以利用中间件提供的额外功能。
- 通用客户端:通常会使用连接器或中间件与服务器端进行交互。通用客户端的设计目标是兼容多种服务器端应用程序,因此通常会通过中间件来提高通用性和灵活性。
- 中间件:提供额外的服务和功能,如连接池管理、事务处理、安全认证等,提高系统的性能和可维护性。
🌿数据库在项目中的地位
实际中,一个公司往往会需要像用户提供各种服务(如,电子邮件服务用来验证、数据库服务用来存储用户的信息、web服务器向用户发送网页文件…)
- 所以,一个公司往往有多个服务器用于不同目的,多个服务器间也可以有联系(这就导致网络攻击可以沿着它们之间传播,见《网络空间系统安全概率》的lucky公司攻击案例)
- 同时,数据集中存储在一个服务器上容易出问题(比如一旦被攻击信息可能就不可挽回的丢失了)。由此,公司会对数据库采取其它架构来保障数据安全。见中心化的介绍