20250716和20250717
学习内容
1、
- 目标:了解数据库的主备架构和备份策略。
- 主备架构的设置和高可用原理。
- 不同数据库(MySQL/Oracle/PostgreSQL)的备份工具。
- 学习内容:
- 全球主流数据库 https://blog.youkuaiyun.com/hezuijiudexiaobai/article/details/117887125
- 数据库技术全景 https://blog.youkuaiyun.com/hezuijiudexiaobai/article/details/148933835
- 数据库主备高可用机制深入对比研究https://blog.youkuaiyun.com/hezuijiudexiaobai/article/details/148974794
作业:
1、RDS使用手册实操
2、列出常见数据库密码、账号、常见参数等
- QFusion支持的20+种主流数据库操作语句大全 https://blog.youkuaiyun.com/hezuijiudexiaobai/article/details/149340651
一、数据库类别
1.数据库定义
2.全球数据库
数据库管理系统(DBMS)类型及其功能的整理表格,涵盖其主要用途、特点和适用场景:
数据库类型 | 主要功能与特点 | 适用场景示例 |
---|---|---|
关系型DBMS | 基于关系模型,使用SQL进行数据操作,支持ACID事务,结构化数据存储。 | 金融系统、ERP、CRM、传统业务系统 |
键值存储 | 简单的键-值对存储,高性能读写,适合缓存、会话管理等。 | 缓存系统、分布式会话管理 |
文档存储 | 存储半结构化文档(如JSON/BSON),支持灵活模式,适合非结构化数据处理。 | 内容管理系统、日志分析、用户配置管理 |
时间序列DBMS | 专为时间序列数据设计,优化了按时间排序的查询和聚合操作。 | 物联网监控、金融交易历史、传感器数据 |
图形DBMS | 使用图结构存储实体和关系,擅长处理复杂的关系网络。 | 社交网络、推荐系统、欺诈检测 |
搜索引擎 | 支持全文搜索和复杂查询,通常基于倒排索引技术。 | 日志分析、网站搜索、内容检索 |
矢量DBMS | 专门处理向量数据(如机器学习嵌入),支持高效相似性搜索。 | 图像识别、推荐系统、自然语言处理 |
面向对象的DBMS | 直接支持面向对象编程范式,数据以对象形式存储,适合复杂数据模型。 | CAD系统、多媒体应用 |
RDF存储 | 支持RDF三元组存储,用于语义网和知识图谱,支持SPARQL查询。 | 知识图谱、语义推理 |
宽列存储 | 列族存储结构,适合大规模数据分布和高扩展性需求。 | 大数据分析、Hadoop生态系统集成 |
多值DBMS | 支持字段中存储多个值,适用于需要灵活数据结构的场景。 | 多媒体数据库、产品目录 |
空间DBMS | 支持地理空间数据类型和索引,优化空间查询(如距离计算)。 | 地理信息系统(GIS)、地图服务 |
原生XML DBMS | 专门存储和查询XML数据,支持XPath/XQuery等标准。 | 文档管理系统、电子出版 |
事件存储 | 记录系统中的事件流,支持事件溯源模式,强调不可变性和顺序性。 | 审计日志、事件溯源架构 |
内容存储 | 专注于内容管理,支持版本控制、元数据管理和内容检索。 | 数字资产管理、企业内容管理系统 |
导航DBMS | 基于导航模型(如层次或网络模型),数据通过指针访问。 | 早期银行系统、遗留系统 |
柱状存储 | 按列存储数据,优化分析查询(如聚合操作),适合大数据仓库。 | 数据仓库、商业智能分析 |
时间序列 + 可观察性 | 结合时间序列数据与可观察性工具(如指标、日志、追踪),用于监控和故障排查。 | 系统监控、微服务可观测性 |
3.关系型和非关系数据库
**数据模型的差异**
4.(架构)分布式数据库概览表
在单机性能有限条件下,解决数据量快速增长的最佳解决方案
项目 | 描述 |
---|---|
定义 | 数据存储在多个物理位置(节点)上的数据库系统,这些节点通过网络连接并协同工作,对外提供统一的数据访问接口。 |
数据分布方式 | - 水平分片(按行划分) - 垂直分片(按列划分) - 混合分片 |
关键特性 | - 数据分布(Data Distribution) - 数据复制(Replication) - 透明性(Location, Replication, Query) - 高可用性与容错 - 并发控制与事务管理 - 可扩展性(横向扩展) |
分类 | 描述 |
---|---|
同构分布式数据库 | 所有节点使用相同的数据库管理系统(DBMS),结构一致,易于管理。 |
异构分布式数据库 | 节点使用不同的DBMS(如Oracle + MySQL + MongoDB等),需中间件协调。 |
联邦数据库系统 | 各个数据库保持高度自治,通过联邦机制实现联合查询,强调“松耦合”。 |
优势 | 描述 |
---|---|
高可用性 | 多副本机制确保即使部分节点故障,服务仍可继续运行。 |
可扩展性强 | 支持横向扩展(Scale-out),通过添加节点提升性能和容量。 |
地理分布支持 | 适合跨区域部署,降低延迟,提升本地化服务能力。 |
容错能力强 | 自动故障转移、数据恢复机制保障系统稳定性。 |
挑战 | 描述 |
---|---|
一致性难题 | CAP理论限制:难以同时满足一致性、可用性和分区容忍性。 |
事务管理复杂 | 分布式事务需要两阶段提交(2PC)、三阶段提交(3PC)或基于共识算法(如Raft、Paxos)。 |
网络依赖性强 | 节点间通信频繁,网络延迟或中断可能影响性能。 |
成本较高 | 运维复杂度高,硬件/软件/人员成本上升。 |
适用场景 | 描述 |
---|---|
大型互联网应用 | 如电商平台、社交网络、在线支付等,需高并发、低延迟处理。 |
物联网(IoT) | 设备数据分散、海量读写,需边缘节点与中心协同。 |
企业全球化系统 | 跨国业务需多地部署,数据就近访问以提高性能。 |
实时数据分析平台 | 结合OLAP能力进行大规模实时数据处理。 |
云原生架构 | 微服务、容器化环境下,支持弹性伸缩和自动负载均衡。 |
典型代表 | 描述 |
---|---|
Google Spanner | 全球级分布式数据库,支持强一致性与水平扩展。 |
Amazon Aurora | 支持自动分片,适用于OLTP场景的云原生数据库。 |
CockroachDB | 类似Spanner,开源的分布式SQL数据库。 |
Apache Cassandra | 高可用、强扩展性的NoSQL分布式数据库,适合写密集场景。 |
TiDB | 开源的HTAP分布式数据库,兼容MySQL协议,支持混合负载。 |
分布式事务
分布式事务是指在分布式数据库环境中,保证跨多个节点的数据操作的一致性和完整性。实现分布式事务的核心技术主要涉及如何协调各个节点之间的操作以确保原子性、一致性、隔离性和持久性(ACID特性)。以下是几种常见的分布式事务处理机制和技术:
技术名称 | 描述 | 优点 | 缺点 |
---|---|---|---|
两阶段提交协议 (2PC, Two-Phase Commit) | 包括准备阶段和提交阶段。协调者首先询问所有参与者是否准备好提交,然后根据回复决定是否进行提交或中止。 | 简单直观,易于理解和实现。 | 性能开销大,尤其是当网络延迟较高时;存在阻塞问题,如果某个参与者失败,则整个事务可能被挂起。 |
三阶段提交协议 (3PC, Three-Phase Commit) | 在2PC基础上增加了预提交阶段,旨在减少因协调者故障导致的问题。 | 减少了由于单点故障引起的问题;降低了事务的阻塞时间。 | 复杂度增加,且仍无法完全避免阻塞情况的发生;对网络分区敏感。 |
Paxos算法 | 一种用于达成共识的算法,可以用来实现分布式事务中的日志复制等任务。 | 提供了高可用性和容错能力;适用于异步网络环境。 | 实现复杂;难以理解;性能依赖于网络条件。 |
Raft算法 | Paxos的替代方案,设计目标是更容易理解和实现。它通过选举领导者来管理日志复制过程。 | 更加直观易懂;提供了良好的可视化解释;实现了与Paxos相似的功能。 | 相比Paxos,在某些情况下效率稍低。 |
Saga模式 | 将长事务分解为一系列短事务序列,每个短事务都可以单独提交或回滚。适用于长时间运行的业务流程。 | 支持长时间运行的事务;减少了锁等待时间;提高了系统的响应速度。 | 需要手动编写补偿逻辑来处理失败情况;不支持严格的ACID特性。 |
TCC(Try-Confirm-Cancel)模式 | 是一种柔性事务解决方案,包括尝试、确认和取消三个步骤。适合需要强一致性的场景。 | 对资源锁定的时间较短;允许业务自行定义回滚逻辑。 | 实现复杂;需要开发者明确指定每个阶段的行为。 |
2pc图例:
5、部署模式
6、 数据处理平台
二、数据库的主备架构
1.MySQL数据库
MySQL是最流行的开源关系型数据库,其架构设计注重性能、可扩展性和易用性。MySQL采用客户端-服务器架构,由服务器进程、存储引擎和客户端组件组成[]。
存储引擎架构是MySQL的一大特色,支持多种存储引擎,如InnoDB、MyISAM和Memory等,每种引擎针对不同的应用场景进行了优化。
InnoDB是默认的存储引擎,支持事务、行级锁和外键约束,适用于大多数场景111.
1.MySQL主要架构组件:
MySQL的主要架构组件包括:
- 连接层:处理客户端连接、认证和权限验证。
- 服务层:包含查询解析器、优化器和执行器,负责处理SQL语句的解析、优化和执行。
- 存储引擎层:负责数据的存储和检索,与物理存储交互。
- 存储层:实际的数据存储,包括数据文件、索引文件和日志文件等。
+-----------------------+
| 客户端应用程序 |
| (MySQL Client, JDBC等) |
+----------+------------+
|
| 连接请求/SQL语句
▼
+-----------------------+
| 连接层 | <-- 管理连接池、身份认证、安全验证
| (Connector/Thread Pool)|
+----------+------------+
|
| 验证后的SQL请求
▼
+-----------------------+
| 服务层 | <-- SQL接口、核心处理层
| +-------------------+ |
| | SQL接口 | | <-- 接收SQL指令
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 查询解析器 | | <-- 语法解析、语义检查
| | (Parser) | |
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 查询优化器 | | <-- 生成执行计划、索引选择
| | (Optimizer) | |
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 执行器 | | <-- 调用存储引擎API
| | (Executor) | |
| +-------------------+ |
+----------+------------+
|
| 优化后的执行计划
▼
+-----------------------+
| 存储引擎层 | <-- 可插拔式引擎(InnoDB, MyISAM等)
| (Storage Engines) |
| +-------------------+ |
| | InnoDB引擎 | | <-- 事务/行锁/崩溃恢复
| +---------+---------+ |
| | |
| +---------v---------+ |
| | MyISAM引擎 | | <-- 表锁/全文索引
| +-------------------+ |
+----------+------------+
|
| 读写数据请求
▼
+-----------------------+
| 存储层 | <-- 物理存储管理
| +-------------------+ |
| | 数据文件 | | <-- .ibd(表数据)、.frm(表结构)
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 日志文件 | | <-- redo log/undo log/binlog
| +-------------------+ |
+-----------------------+
2.MySQL 最新发展包括:
-
增强的JSON支持:提供了JSON数据类型和专用函数,支持高效的JSON数据存储和查询[]。
-
窗口函数:支持分析查询中的窗口函数,用于计算移动平均值、排名和累计值等[]。
-
公用表表达式(CTE):支持递归CTE,简化复杂查询的编写[]。
-
InnoDB增强:改进了缓冲池管理、锁机制和死锁检测,提高了并发性能[]。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 原文链接:https://blog.youkuaiyun.com/hezuijiudexiaobai/article/details/148933835
3.MySQL部署方式
部署方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
仓库安装 | 快速安装,依赖管理自动化 | 版本可能滞后 | 生产/开发环境 |
二进制安装 | 灵活配置,企业级部署 | 步骤复杂,需手动管理依赖 | 企业生产环境 |
容器化 | 快速部署,环境隔离 | 数据持久化需额外配置 | 开发测试、微服务 |
源码安装 | 高度定制化 | 维护成本高 | 调试或特殊需求 |
云平台 | 自动化运维,节省时间 | 成本较高,灵活性受限 | 无服务器管理需求的团队 |
集群部署 | 高可用性,负载均衡 | 配置复杂,需监控调优 | 生产环境高可用需求 |
参考资料
- 官方文档:MySQL Documentation
- 云服务部署:Azure Database for MySQL、阿里云ECS
- 社区教程:优快云博客、知乎
2、PostgreSQL
1.PostgreSQL的架构特点包括:
- 多进程架构:每个客户端连接对应一个服务器进程,提高了并发性和稳定性。
- 存储管理器:负责数据的存储、检索和索引,支持多种索引类型,如B-tree、Hash、GiST和GIN等。
- 事务处理:支持完整的ACID特性、多版本并发控制(MVCC)和保存点,确保数据一致性和隔离性。
- 查询优化器:基于代价的优化器,考虑多种执行计划并选择最优方案
+-----------------------+
| 客户端应用程序 |
| (psql, JDBC, pgAdmin等)|
+----------+------------+
|
| 连接请求/SQL语句
▼
+-----------------------+
| 连接处理层 | <-- 使用进程模型(非线程)
| (Postmaster Daemon) |
| +-------------------+ |
| | 连接分配 | | <-- 为每个连接fork独立postgres进程
| +-------------------+ |
+----------+------------+
|
| 认证后的SQL请求
▼
+-----------------------+
| 核心处理层 | <-- 所有SQL处理的公共层
| +-------------------+ |
| | 解析器(Parser) | | <-- 生成解析树
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 重写器(Rewriter) | | <-- 处理视图/规则展开
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 优化器(Planner) | | <-- 基于成本的优化
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 执行器(Executor) | | <-- 调用存储方法
| +-------------------+ |
+----------+------------+
|
| 执行计划
▼
+-----------------------+
| 存储引擎层 | <-- 统一存储引擎(不可插拔)
| +-------------------+ |
| | 访问方法 | | <-- Heap/Index/Bitmap等扫描方式
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 事务管理器 | | <-- MVCC实现
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 缓存管理器 | | <-- Shared Buffer管理
| +-------------------+ |
+----------+------------+
|
| 物理读写请求
▼
+-----------------------+
| 存储层 | <-- 物理文件系统
| +-------------------+ |
| | 表数据文件 | | <-- OID命名的数据文件(如16384)
| +---------+---------+ |
| | |
| +---------v---------+ |
| | WAL日志 | | <-- 事务日志(pg_wal目录)
| +---------+---------+ |
| | |
| +---------v---------+ |
| | 事务日志 | | <-- Commit Logs(pg_xact)
| +---------+---------+ |
| | |
| +---------v---------+ |
| | Clog | | <-- 事务状态日志
| +-------------------+ |
+-----------------------+
+-----------------------+
| 后台进程 | <-- 系统级守护进程
| +-------------------+ |
| | 后台写进程(BGWriter)| |
| +---------+---------+ |
| | 检查点进程(Checkpointer)| |
| +---------+---------+ |
| | WAL写进程(WAL Writer) | |
| +---------+---------+ |
| | 自动清理进程(AutoVacuum)| |
| +-------------------+ |
+-----------------------+
2.PostgreSQL的扩展与优化策略
PostgreSQL 的扩展机制:PostgreSQL 通过扩展(Extensions)实现功能增强,支持自定义数据类型、索引、存储过程等。
垂直扩展(Scale Up)是通过提升单个数据库实例的硬件资源(CPU、内存、磁盘、网络带宽)来增强性能。例如,升级服务器配置、增加内存或使用更高性能的存储设备
水平扩展(Scale Out)是通过增加多个数据库节点,将负载分散到不同实例,实现性能与可用性的提升。常见方式包括:分片(Sharding)、主从复制、读写分离。
-
读写分离:使用主从复制架构,将读操作分发到多个从服务器,提高读取性能[]。
-
分片:将数据分散到多个数据库实例中,每个实例处理一部分数据,适用于超大规模数据集[]。
-
连接池:使用连接池工具(如pgBouncer)管理数据库连接,减少连接开销,提高PostgreSQL处理并发用户的能力[]。
性能优化技术:
-
查询优化:通过分析查询计划(EXPLAIN ANALYZE)识别性能瓶颈,并添加适当的索引[]。
-
内存配置:调整共享缓冲区(shared_buffers)和工作内存(work_mem)参数,优化内存使用[]。
-
索引优化:选择合适的索引类型(B-tree、Hash、GiST等)并创建覆盖索引,减少磁盘I/O[]。
-
批量操作:使用批量插入和更新操作,减少事务开销和网络往返次数。
老大哥超链接:666