数据库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(原子性、一致性、隔离性、持久性)特性。
并发控制:管理多个用户对数据的并发访问。

存储引擎介绍

数据库系统存储引擎支持事务锁类型适用场景其他特点
MySQLInnoDB行级锁高并发和事务支持的场景支持外键,高性能读写操作
MySQLMyISAM表级锁读多写少的场景查询速度快,支持全文索引
MySQLMEMORY表级锁临时数据存储和高速缓存场景数据存储在内存中,访问速度快
PostgreSQL默认引擎行级锁复杂查询和事务支持的场景强大的事务支持和并发控制
SQLite默认引擎表级锁小型应用和开发环境轻量级嵌入式数据库
MongoDBWiredTiger文档级锁高性能和并发支持的场景支持压缩,减少存储空间
MongoDBMMAPv1集合级锁读多写少的场景使用内存映射文件进行数据存储
Cassandra默认引擎分布式锁大规模数据存储和高并发访问分布式架构,高可用性和水平扩展

● 组成软件之一————查询处理器

查询处理器负责解析和执行SQL语句,将用户的查询请求转换为数据库可以理解的操作。

功能:

SQL解析:将SQL语句解析为内部的查询计划。
查询优化:优化查询计划,以提高查询效率。
执行引擎:执行查询计划,返回查询结果。

● 组成软件之一————事务管理器

事务管理器负责管理事务的ACID特性,确保数据的一致性和完整性。

功能:

事务控制:管理事务的开始、提交和回滚。
锁管理:管理数据的锁,以实现并发控制。
日志管理:记录事务日志,用于恢复和回滚。

● 组成软件之一————存储管理

存储管理负责管理数据库的物理存储,包括文件系统、磁盘空间等。

功能:

文件管理:管理数据文件和日志文件。
空间管理:管理磁盘空间的分配和回收。
备份和恢复:提供数据备份和恢复功能。

🍂数据库的连接器/其它软件

想让自己开发的软件连接到数据库,就要使用对应的连接器或者其它软件(如,中间件)

如果不使用专门的客户端(客户端自带连接器),就要自己给自己的软件配置连接器或者其它软件才可以与数据库服务器端连接。

数据库连接器

(也称为数据库驱动程序)是客户端与数据库服务器之间通信的桥梁。它负责建立和管理连接,发送请求,接收响应等。

  • 特点
    • 建立连接:负责初始化与数据库服务器的网络连接。
    • 发送请求:将客户端的请求(如SQL语句)转换为数据库服务器能够理解的格式,并通过网络发送给服务器。
    • 接收响应:接收数据库服务器返回的结果,并将其转换为客户端能够理解的格式。
    • 管理连接:负责管理连接的生命周期,包括连接的打开、关闭、超时处理等。

连接器和其它软件总结

  • 数据库连接器:是客户端与数据库服务器之间通信的桥梁,负责建立和管理连接,发送请求,接收响应等。
  • 专用客户端:通常会直接配备连接器,以便与服务器端进行高效、优化的通信。在某些情况下,也会通过中间件与服务器端交互,以利用中间件提供的额外功能。
  • 通用客户端:通常会使用连接器或中间件与服务器端进行交互。通用客户端的设计目标是兼容多种服务器端应用程序,因此通常会通过中间件来提高通用性和灵活性。
  • 中间件:提供额外的服务和功能,如连接池管理、事务处理、安全认证等,提高系统的性能和可维护性。



🌿数据库在项目中的地位

在这里插入图片描述
实际中,一个公司往往会需要像用户提供各种服务(如,电子邮件服务用来验证、数据库服务用来存储用户的信息、web服务器向用户发送网页文件…)

  • 所以,一个公司往往有多个服务器用于不同目的,多个服务器间也可以有联系(这就导致网络攻击可以沿着它们之间传播,见《网络空间系统安全概率》的lucky公司攻击案例)
  • 同时,数据集中存储在一个服务器上容易出问题(比如一旦被攻击信息可能就不可挽回的丢失了)。由此,公司会对数据库采取其它架构来保障数据安全。见中心化的介绍

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/84505.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

离线服务器算法部署环境配置

本文将详细记录我如何为一台全新的离线服务器配置必要的运行环境,包括基础编译工具、NVIDIA显卡驱动以及NVIDIA-Docker,以便顺利部署深度学习算法。 前提条件: 目标离线服务器已安装操作系统(本文以Ubuntu 18.04为例&#xff09…

chromedp -—— 基于 go 的自动化操作浏览器库

chromedp chromedp 是一个用于 Chrome 浏览器的自动化测试工具,基于 Go 语言开发,专门用于控制和操作 Chrome 浏览器实例。 chromedp 安装 go get -u github.com/chromedp/chromedp基于chromedp 实现的的简易学习通刷课系统 目前实现的功能&#xff…

高级特性实战:死信队列、延迟队列与优先级队列(三)

四、优先级队列:优先处理重要任务 4.1 优先级队列概念解析 优先级队列(Priority Queue)是一种特殊的队列数据结构,它与普通队列的主要区别在于,普通队列遵循先进先出(FIFO)的原则,…

python打卡day34

GPU训练及类的call方法 知识点回归: CPU性能的查看:看架构代际、核心数、线程数GPU性能的查看:看显存、看级别、看架构代际GPU训练的方法:数据和模型移动到GPU device上类的call方法:为什么定义前向传播时可以直接写作…

Newtonsoft Json序列化数据不序列化默认数据

问题描述 数据在序列号为json时,一些默认值也序列化了,像旋转rot都是0、缩放scal都是1,这样的默认值完全可以去掉,减少和服务器通信数据量 核心代码 数据结构字段增加[DefaultValue(1.0)]属性,缩放的默认值为1 public class Vec3DataOne{[DefaultValue(1.0)] public flo…

可增添功能的鼠标右键优化工具

软件介绍 本文介绍一款能优化Windows电脑的软件,它可以让鼠标右键菜单添加多种功能。 软件基本信息 这款名为Easy Context Menu的鼠标右键菜单工具非常小巧,软件大小仅1.14MB,打开即可直接使用,无需进行安装。 添加功能列举 它…

Gemini 2.5 Pro 一次测试

您好,您遇到的重定向循环问题,即在 /user/messaging、/user/login?return_to/user/messaging 和 /user/login 之间反复跳转,通常是由于客户端的身份验证状态检查和页面重定向逻辑存在冲突或竞争条件。 在分析了您提供的代码(特别…

vue3前端后端地址可配置方案

在开发vue3项目过程中,需要切换不同的服务器部署,代码中配置的服务需要可灵活配置,不随着run npm build把网址打包到代码资源中,不然每次切换都需要重新run npm build。需要一个配置文件可以修改服务地址,而打包的代码…

大模型微调与高效训练

随着预训练大模型(如BERT、GPT、ViT、LLaMA、CLIP等)的崛起,人工智能进入了一个新的范式:预训练-微调(Pre-train, Fine-tune)。这些大模型在海量数据上学习到了通用的、强大的表示能力和世界知识。然而,要将这些通用模型应用于特定的下游任务或领域,通常还需要进行微调…

编程技能:字符串函数10,strchr

专栏导航 本节文章分别属于《Win32 学习笔记》和《MFC 学习笔记》两个专栏,故划分为两个专栏导航。读者可以自行选择前往哪个专栏。 (一)WIn32 专栏导航 上一篇:编程技能:字符串函数09,strncmp 回到目录…

动态规划-53.最大子数组和-力扣(LeetCode)

一、题目解析 在给定顺序的数组中找出一段具有最大和的连续子数组,且大小最小为1. 二、算法原理 1.状态表示 我们可以意一一枚举出所有的子数组,但我们想要的是最大子数组,所以f[i]表示:以i位置为结尾,所有子数组的最…

C++ queue对象创建、queue赋值操作、queue入队、出队、获得队首、获得队尾操作、queue大小操作、代码练习

对象创建&#xff0c;代码见下 #include<iostream> #include<queue>using namespace std;int main() {// 1 默认构造函数queue<int> q1;// 2 拷贝构造函数queue<int> q2(q1);return 0;} queue赋值操作&#xff0c;代码见下 #include<iostream>…

全链路解析:影刀RPA+Coze API自动化工作流实战指南

在数字化转型加速的今天&#xff0c;如何通过RPA与API的深度融合实现业务自动化提效&#xff0c;已成为企业降本增效的核心命题。本文以「影刀RPA」与「Coze API」的深度协作为例&#xff0c;系统性拆解从授权配置、数据交互到批量执行的完整技术链路&#xff0c;助你快速掌握跨…

php本地 curl 请求证书问题解决

错误: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for 解决方案 在php目录下创建证书文件夹, 执行下面生成命令, 然后在php.ini 文件中配置证书路径; 重启环境 curl --eta…

【图数据库】--Neo4j 安装

目录 1.Neo4j --概述 2.JDK安装 3.Neo4j--下载 3.1.下载资源包 3.2.创建环境变量 3.3.运行 Neo4j 是目前最流行的图形数据库(Graph Database)&#xff0c;它以节点(Node)、关系(Relationship)和属性(Property)的形式存储数据&#xff0c;专门为处理高度连接的数据而设计。…

MIT 6.S081 2020Lab5 lazy page allocation 个人全流程

文章目录 零、写在前面一、Eliminate allocation from sbrk()1.1 说明1.2 实现 二、Lazy allocation2.1 说明2.2 实现 三、Lazytests and Usertests3.1 说明3.2 实现3.2.1 lazytests3.2.2 usertests 零、写在前面 可以阅读下4.6页面错误异常 像应用程序申请内存&#xff0c;内…

(Git) 稀疏检出(Sparse Checkout) 拉取指定文件

文章目录 &#x1f3ed;作用&#x1f3ed;指令总览&#x1f477;core.sparseCheckout&#x1f477;sparse-checkout 文件 &#x1f3ed;实例演示⭐END&#x1f31f;交流方式 &#x1f3ed;作用 类似于 .gitignore 进行文件的规则匹配。 一般在需要拉取大型项目指定的某些文件…

docker初学

加载镜像&#xff1a;docker load -i ubuntu.tar 导出镜像&#xff1a;docker save -o ubuntu1.tar ubuntu 运行&#xff1a; docker run -it --name mu ubuntu /bin/bash ocker run -dit --name mmus docker.1ms.run/library/ubuntu /bin/bash 进入容器&#xff1a;docke…

Docker系列(二):开机自启动与基础配置、镜像加速器优化与疑难排查指南

引言 docker 的快速部署与高效运行依赖于两大核心环节&#xff1a;基础环境搭建与镜像生态优化。本期博文从零开始&#xff0c;系统讲解 docker 服务的管理配置与镜像加速实践。第一部分聚焦 docker 服务的安装、权限控制与自启动设置&#xff0c;确保环境稳定可用&#xff1b…

计算机视觉(图像算法工程师)学习路线

计算机视觉学习路线 Python基础 常量与变量 列表、元组、字典、集合 运算符 循环 条件控制语句 函数 面向对象与类 包与模块Numpy Pandas Matplotlib numpy机器学习 回归问题 线性回归 Lasso回归 Ridge回归 多项式回归 决策树回归 AdaBoost GBDT 随机森林回归 分类问题 逻辑…