文章目录
- 一、数据库基础
- 1.1 数据库基础定义
- 1.2 数据库分类与典型产品
- 1.3 数据库模型
- 1.4 数据库层次结构
- 1.5 数据库核心机制
- 1.6 数据表和视图
- 1.61 数据表(Table)
- 1.62 视图(View)
- 1.7 键类型
- 1.8 MySQL数据类型
- 1.9 数据库范式化
- 二、 数据库技术构成
- 2.1 系统构成
- 2.2 SQL语言
- 2.3 数据库访问技术
- 2.31 ODBC(开放数据库互连)
- 2.32 ADO(ActiveX Data Objects)
- 2.33 JDBC(Java数据库连接)
- 2.34 ORM(对象关系映射)框架
- 2.4 数据库引擎
- 2.41 数据库引擎核心组件
- 2.42 主流数据库引擎对比
- 2.43 引擎选型策略
- 三、相关概念中英文表格
前面两篇文章,介绍了MySQL已经其在Windows和Linux上的安装。在学习相关操作之前,应该先明确一些基本的、核心的概念。
历史文章点击👉:SQL
🐈⬛github:https://github.com/mysql
💻官网: https://www.mysql.com
🌏维基百科:https://zh.wikipedia.org/wiki/MySQL
一、数据库基础
1.1 数据库基础定义
数据库 (Database
,DB
) 是按照特定的数据模型组织、存储和管理数据的计算机化系统,通常存储在计算机存储设备中。它可以包含多种类型的数据,如文本、数字、图像、视频和文件等。数据库的核心目标是便于有效地存储、检索、修改、删除和管理数据。
数据库管理系统(Database Management System,简称 DBMS
)是用于创建、管理、和维护数据库的系统软件,提供了对数据的增、删、查、改操作,支持数据的存储、访问、安全控制、备份等功能。DBMS通常通过数据库模型来组织数据,例如关系型数据库(RDBMS)、文档型数据库(NoSQL)等。
数据库与DBMS的关系:数据库本质上是数据的集合,而数据库管理系统是实现对这些数据进行操作和管理的软件。就像Excel文件(.xls,.xlsx等)和Excel软件的关系一样,数据库是数据存储的容器,而DBMS是对这些数据进行管理和操作的工具。
例如,MySQL数据库是由MySQL DBMS管理的数据库实例,而MySQL本身是一个数据库管理系统。
概念 | 完整定义与扩展说明 |
---|---|
数据库 (DB) | 按特定数据模型组织、存储和管理数据的电子化仓库,核心特性: 1. 数据结构化 2. 高共享性 3. 低冗余度 4. 数据独立性(物理独立性与逻辑独立性) |
数据库管理系统(Database Management System,DBMS) | 数据库管理系统,核心功能: - 数据定义(DDL) - 数据操作(DML) - 事务管理(ACID) - 并发控制 - 数据安全与恢复 |
1.2 数据库分类与典型产品
数据库管理系统可以根据不同的特点进行分类,其中最常见的是根据数据库模型(如关系型数据库、NoSQL数据库等)进行分类。
关系型数据库:
- 关系型数据库(
Relational Database
)基于关系模型,使用表格(二维数组)来存储数据。每个表由行和列组成,每行代表一条记录,每列代表一个数据字段。关系型数据库的优点包括高一致性、良好的事务支持、以及强大的查询语言(SQL)。它们广泛应用于企业的核心业务系统中,如ERP、CRM等。
非关系型数据库(NoSQL
):
- NoSQL(Not Only SQL)数据库是为了解决关系型数据库在处理大规模、非结构化数据时的局限性而提出的。它们支持多种数据模型,如键值存储、文档型、列族存储和图数据库等。NoSQL数据库通常具有更好的扩展性,尤其适用于大数据场景和实时分析。
分类 | 子类/技术特性 | 代表产品与场景 |
---|---|---|
关系型数据库 (Relational database) | - 基于关系模型(表、行、列) - 支持ACID事务 - 强一致性 - 结构化查询语言(SQL) | OLTP场景:MySQL、PostgreSQL、Oracle 分析型:Amazon Redshift、Snowflake |
NoSQL数据库 | 1. 键值存储:高性能读写,弱一致性 2. 文档型:JSON/BSON格式,灵活模式 3. 列族存储:高扩展性,适合海量数据 4. 图数据库:复杂关系网络 | Redis(缓存)、MongoDB(文档)、Cassandra(列族)、Neo4j(图数据库) |
NewSQL数据库 | 结合NoSQL扩展性与RDBMS的ACID特性,分布式架构 | Google Spanner、CockroachDB、TiDB |
内存数据库 | 数据常驻内存,极低延迟 | Redis(持久化)、MemSQL、VoltDB |
时序数据库 | 高效处理时间序列数据(如监控、IoT) | InfluxDB、TimescaleDB、Prometheus |
多模型数据库 | 支持多种数据模型(关系+文档+图) | ArangoDB、Microsoft Azure Cosmos DB |
1.3 数据库模型
数据库模型描述了在数据库中数据的组织、存储及操作方式。不同的数据库模型适用于不同类型的数据处理需求。
-
层次模型与网状模型:
- 层次模型和网状模型是早期的数据库模型,通常用于处理较为简单的数据结构。层次模型以树形结构来表示数据的层级关系,而网状模型则使用图结构来表示数据之间的连接。虽然这两种模型在处理复杂数据关系时有局限性,但它们仍然在某些特定场景下发挥作用。
-
关系模型:
- 关系模型基于数学集合理论,将数据表示为表格的形式,每个表格通过主键和外键进行关联。关系模型广泛应用于企业管理、金融、政府等领域,
适用于高规范化的数据
。
- 关系模型基于数学集合理论,将数据表示为表格的形式,每个表格通过主键和外键进行关联。关系模型广泛应用于企业管理、金融、政府等领域,
模型 | 数据结构 | 适用场景 | 优缺点 |
---|---|---|---|
层次模型 | 树形结构(父子节点) | 文件系统、组织结构管理 | ✅ 查询效率高 ❌ 数据冗余,多对多关系处理困难 |
网状模型 | 图结构(节点+连接) | 早期工业系统(如IDMS) | ✅ 复杂关系支持 ❌ 结构复杂,维护成本高 |
关系模型 | 二维表(行+列) | 通用业务系统(ERP、CRM等) | ✅ 结构清晰,标准化高 ❌ 大数据处理效率较低 |
文档模型 | JSON/BSON嵌套文档 | 内容管理、日志存储 | ✅ 灵活模式 ❌ 关联查询效率低 |
列族模型 | 按列簇存储(BigTable衍生) | 大数据分析(如HBase) | ✅ 高压缩率,适合稀疏数据 ❌ 随机读写性能差 |
1.4 数据库层次结构
数据库的层次结构通常分为物理层、逻辑层和用户层。每一层负责不同的功能,从数据存储到用户访问,都由这些层次共同协作。
- 物理层:物理层负责数据库数据的存储方式和优化,它包括文件组织(如堆文件、索引文件等)、存储引擎(如InnoDB、RocksDB)以及缓存机制。
该层关注数据在硬件中的存储形式,确保数据的有效存取
。 - 逻辑层:逻辑层则定义了数据库的逻辑结构,包括表结构、视图、以及数据完整性约束(如主键、外键等)。这一层不关心数据的具体存储形式,而是
定义了如何通过SQL语句来操作数据库
。 - 用户层:用户层为最终用户提供数据访问接口,包括权限控制、虚拟表、以及数据库与应用程序之间的接口协议(如JDBC、ODBC等)。通过该层,用户可以方便地访问数据库进行查询和操作。
层次 | 核心功能 | 关键组件示例 |
---|---|---|
内层(物理层) | 管理数据的物理存储: - 文件组织(堆文件、索引文件) - 存储引擎(InnoDB、RocksDB) - 缓存机制(Buffer Pool) | 存储引擎、磁盘块管理、数据压缩算法 |
概念层(逻辑层) | 定义全局的逻辑结构: - 表结构(Schema) - 视图(View) - 完整性约束(主键、外键) | 数据字典、查询优化器、事务管理器 |
外层(用户层) | 提供用户的数据访问: - 权限控制(RBAC) - 虚拟表(View) - 接口协议(JDBC/ODBC) | 应用程序接口、可视化工具(如Navicat)、ORM框架(Hibernate) |
1.5 数据库核心机制
数据库管理系统的核心机制包括事务管理、并发控制和数据安全等。这些机制确保了数据库在高并发环境下的数据一致性、完整性和可靠性。
🟢 事务管理
事务(transaction
)是指一组数据库操作,要求在执行过程中要么全部成功,要么全部失败。事务管理确保数据库在并发操作中能够维持一致性,避免出现部分操作执行成功、部分操作执行失败的情况。
ACID
是一组用于确保数据库事务可靠性和一致性的原则,全称为 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。这些特性共同保证了在并发环境下,数据库事务能够正确、安全地执行,即使在系统故障或其他异常情况下也能保持数据的完整性和正确性。
特性 | 定义 | 实现技术 |
---|---|---|
原子性 | 事务内操作全部成功或全部回滚 | Undo Log(回滚日志) |
一致性 | 事务执行后数据库状态符合业务规则 | 约束(主键、外键、Check约束) |
隔离性 | 并发事务互不干扰 | 锁机制(行锁、表锁)、MVCC(多版本并发控制) |
持久性 | 事务提交后数据永久保存 | Redo Log(重做日志)、WAL(预写式日志) |
🟢索引优化
索引是提高数据访问效率的重要手段,它像书籍的目录,帮助快速定位数据。数据库通过索引结构,如B+树、哈希等,来优化查询性能。
索引类型 | 数据结构 | 适用场景 | 示例 |
---|---|---|---|
B+树索引 | 平衡多路搜索树 | 范围查询、排序(默认索引类型) | MySQL InnoDB |
哈希索引 | 键值哈希映射 | 等值查询(如内存表) | Redis、Memcached |
全文索引 | 倒排索引(分词) | 文本内容搜索 | Elasticsearch、MySQL FullText |
空间索引 | R树/GIS索引 | 地理位置查询 | PostGIS(PostgreSQL扩展) |
1.6 数据表和视图
1.61 数据表(Table)
数据表是关系型数据库中存储数据的核心物理结构,由行(记录)和列(字段)组成,用于持久化保存实体或关系的具体数据。
核心特性
- 物理存储:数据实际存储在磁盘中,占用存储空间。
- 结构定义:需预先定义列名、数据类型(如
INT
,VARCHAR
)及约束(主键、外键、唯一性等)。 - 数据操作:支持增删改查(
INSERT
,DELETE
,UPDATE
,SELECT
)等操作。 - 独立性:每个表代表一个独立的数据实体或关系(如
学生表
、课程表
)。
示例
CREATE TABLE 学生表 (学号 INT PRIMARY KEY, -- 主键约束姓名 VARCHAR(50) NOT NULL, -- 非空约束年龄 INT CHECK (年龄 >= 10), -- 检查约束班级ID INT,FOREIGN KEY (班级ID) REFERENCES 班级表(班级ID) -- 外键约束
);
1.62 视图(View)
视图是基于一个或多个表的查询结果
生成的虚拟表,不存储实际数据,而是通过查询动态生成结果集。
核心特性
- 虚拟性:不占用物理存储空间,数据实时从基表计算。
- 逻辑抽象:隐藏底层表结构的复杂性,提供简化的数据访问接口。
- 安全性:通过视图限制用户访问特定列或行(如屏蔽敏感字段)。
- 更新限制:部分视图支持更新操作,但需满足特定条件(如单表视图、未使用聚合函数)。
视图就是一些特定的SQL语句,每次打开视图,就会执行这些语句。比如,你的表存储了很多信息,而有些信息是不能给客户查看的,现在就可以创建一个视图,只包含表中的特定列,让客户查询这个视图。
这个很像api的概念,简化了操作逻辑,用户只能调用api提供的功能,而无法看到api背后的具体实现。
视图就是一个整合的或者定制化的 “表”,它支持很多表的操作(如查询、对视图创建视图等)。
综上,如果没有相关需求,视图不是数据库的必要内容。
尽管视图支持许多表的操作,但它也有一些限制:
- 性能开销:视图的查询是动态执行的,可能会带来额外的性能开销。
- 更新限制:复杂视图(如包含聚合函数、多表连接等)通常不支持直接更新。
- 依赖性:视图的定义依赖于底层表的结构。如果底层表的结构发生变化,视图可能需要重新定义
示例
-- 创建视图:仅显示学生姓名和班级名称(隐藏学号和班级ID)
CREATE VIEW 学生班级视图 AS
SELECT 学生表.姓名, 班级表.班级名称
FROM 学生表
JOIN 班级表 ON 学生表.班级ID = 班级表.班级ID;
作用与场景
- 简化复杂查询:将多表关联或复杂计算封装为视图(如统计学生平均成绩)。
- 数据权限控制:限制用户仅能访问视图中的字段(如隐藏工资列)。
- 逻辑独立性:基表结构变化时,通过调整视图定义保持应用层不变。
数据表 vs 视图:核心区别
特性 | 数据表(Table) | 视图(View) |
---|---|---|
存储方式 | 物理存储数据,占用磁盘空间 | 虚拟表,仅保存查询定义,不存储数据 |
数据来源 | 直接存储原始数据 | 基于一个或多个表的查询结果动态生成 |
更新操作 | 支持所有增删改查操作 | 仅部分视图支持更新(需满足特定条件) |
性能影响 | 依赖索引和表结构优化 | 复杂视图可能因查询计算影响性能 |
设计目的 | 持久化存储数据实体 | 简化查询、控制访问、逻辑抽象 |
1.7 键类型
🗝️ (1)超键(Super Key)
能唯一标识表中某一行(元组)的一个或多个属性的集合,可能存在冗余属性。
- 冗余性:超键可能包含不必要的属性。
示例:在员工表
中,员工ID + 姓名 + 部门
可组成超键,但仅需员工ID
即可唯一标识记录,其他属性冗余。 - 用途:主要用于理论分析,为候选键的筛选提供基础。
设计原则:
- 实际设计中需消除冗余属性,转化为候选键。
🗝️ (2)候选键(Candidate Key)
最小的超键(无冗余属性),表中可能有多个候选键。
- 唯一性:每个候选键都能唯一标识记录。
示例:在用户表
中,用户ID
和身份证号
均为候选键。 - 不可约简:移除任意属性后,不再满足唯一性。
设计原则:
- 稳定性:优先选择值不随业务逻辑变化的属性(如自增ID)。
- 简洁性:选择字段长度短、存储效率高的候选键。
🗝️ (3)主键(Primary Key)
从候选键中选定的唯一标识符,不可为空且不可重复
。
- 唯一标识:每个表有且仅有一个主键。
示例:订单表
使用订单ID
作为主键。 - 物理存储影响:在InnoDB中,主键是聚簇索引的基准,直接影响数据存储顺序。
设计原则:
-
代理键 vs 自然键:
类型 优点 缺点 代理键(如自增ID) 稳定、长度固定 无业务含义 自然键(如身份证号) 业务相关 可能变更或长度不一 -
最佳实践:
- 优先使用
BIGINT UNSIGNED
自增主键。 - 避免使用业务字段(如手机号),防止业务规则变化导致主键修改。
- 优先使用
🗝️ (4) 外键(Foreign Key)
引用其他表主键的字段,用于维护表间关系与数据一致性。
-
参照完整性:确保子表记录对应有效的父表记录。
示例:订单明细表
中的订单ID
引用订单表
的主键。 -
级联操作:需明确定义数据变更时的行为:
ALTER TABLE 子表 ADD CONSTRAINT fk_order FOREIGN KEY (order_id) REFERENCES 订单表(id) ON DELETE CASCADE -- 父表删除时,子表级联删除 ON UPDATE NO ACTION; -- 父表主键更新时,禁止操作
设计原则:
- 分布式系统慎用:跨节点外键可能引发性能问题,需在应用层实现一致性。
- 索引优化:为外键字段建立索引,加速关联查询。
🗝️ (5)联合主键(Composite Primary Key)
由多个字段组合构成的主键。
- 复合唯一性:多个字段的组合值唯一标识记录。
示例:学生选课表
使用学生ID + 课程ID
作为联合主键。 - 查询优化:联合主键的字段顺序影响索引效率(最左前缀原则)。
设计原则:
- 适用场景:
- 多对多关系表(如
订单_商品
关联表)。 - 无合适单一字段作为主键时。
- 多对多关系表(如
- 字段顺序:区分度高的字段应放在左侧。
示例:国家代码 + 城市代码
优于城市代码 + 国家代码
。
🟢键类型对比:
键类型 | 核心作用 | 典型应用场景 | 注意事项 |
---|---|---|---|
超键 | 理论分析基础 | 数据库设计初期分析 | 需精简冗余属性 |
候选键 | 提供主键候选方案 | 多唯一标识字段的表 | 选择稳定且高效的候选键 |
主键 | 唯一标识记录,优化存储 | 所有表的核心标识,必须的 | 避免使用可变业务字段 |
外键 | 维护跨表数据一致性 | 关联表(如订单与用户) | 分布式系统慎用,需索引优化 |
联合主键 | 复合场景下的唯一性保证 | 多对多关系表、时序数据表 | 注意字段顺序与查询模式匹配 |
1.8 MySQL数据类型
数据库管理系统提供了多种数据类型,用于存储不同类型的值。MySQL支持的常见数据类型包括整数类型、浮点数类型、日期时间类型和字符串类型等。
类别 | 具体类型 | 存储范围 | 使用建议 |
---|---|---|---|
整数型 | TINYINT 、INT 、BIGINT | 1字节 ~ 8字节 | 根据数据范围选择最小类型(节省空间) |
浮点型 | FLOAT 、DOUBLE 、DECIMAL | 单精度、双精度、精确小数(DECIMAL(10,2)) | 金融计算必须使用DECIMAL避免精度丢失 |
时间型 | DATE 、TIME 、DATETIME 、TIMESTAMP | TIMESTAMP自动时区转换 | 记录时间戳优先用TIMESTAMP(4字节节省空间) |
字符串型 | CHAR 、VARCHAR 、TEXT 、BLOB | CHAR定长(0-255)、VARCHAR变长(0-65535) | 短文本用VARCHAR,长文本用TEXT+压缩算法 |
1.9 数据库范式化
数据库范式化旨在通过分解关系来减少冗余数据,确保数据的一致性和完整性。
范式 | 规则 | 示例 |
---|---|---|
1NF(第一范式) | 消除重复列,属性原子性 | 拆分“地址”字段为省、市、街道 |
2NF(第二范式) | 消除部分函数依赖(非主属性完全依赖主键) | 订单表中不应存储客户姓名(应通过外键关联) |
3NF(第三范式) | 消除传递函数依赖(非主属性不依赖其他非主属性) | 员工表中不应包含部门地址(应通过部门ID关联部门表) |
二、 数据库技术构成
2.1 系统构成
数据库系统由三个核心组成部分构成:
-
数据库(Database)
用于持久化存储数据的物理容器,通常以文件形式存在于存储设备中。 -
数据库管理系统(DBMS):管理数据库的软件系统,提供以下功能:
- 数据定义与结构管理
- 数据操作与事务控制
- 安全权限与访问控制
- 备份恢复与性能优化
-
数据库应用程序:用于增强DBMS功能的辅助工具,例如:
- 数据可视化工具(如Tableau)
- 数据同步工具(如Debezium)
- 监控管理工具(如Percona Monitoring)
2.2 SQL语言
SQL(Structured Query Language
)是用于与数据库通信的标准语言,具备以下特点:
- 跨平台性:主流DBMS(MySQL、Oracle、PostgreSQL等)均支持
- 易学性:基于自然英语的关键词(SELECT/INSERT/UPDATE等)
- 功能强大:支持从简单查询到复杂事务处理
- 扩展性:不同DBMS在标准SQL基础上提供专属扩展
SQL的功能分类:
分类 | 功能描述 | 典型语句 |
---|---|---|
DDL(数据定义语言) | 管理数据库对象结构 | CREATE , ALTER , DROP |
DML(数据操作语言) | 操作数据记录 | INSERT , UPDATE , DELETE |
DQL(数据查询语言) | 数据检索 | SELECT |
DCL(数据控制语言) | 权限管理 | GRANT , REVOKE |
SQL应用示例:
(1) 表结构定义
CREATE TABLE user (id INT UNSIGNED NOT NULL AUTO_INCREMENT,name VARCHAR(32) NOT NULL DEFAULT '' COMMENT '姓名',sex TINYINT NOT NULL DEFAULT 0 COMMENT '性别:0-保密,1-男,2-女',mobile VARCHAR(20) NOT NULL DEFAULT '' COMMENT '手机',PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
(2)数据操作
-- 插入数据(显式指定字段)
INSERT INTO user (name, sex, mobile)
VALUES ('张三', 1, '13811772277');-- 插入数据(隐式全字段赋值)
INSERT INTO user VALUES (19, '李四', 2, '13900112233');-- 查询数据
SELECT id, name, mobile FROM user WHERE sex = 1;
2.3 数据库访问技术
数据库访问技术是应用程序与数据库之间建立通信的核心桥梁,不同的技术栈和场景下会采用不同的实现方案。以下对主流技术进行深度解析:
2.31 ODBC(开放数据库互连)
ODBC诞生于1992年,由微软联合多家厂商制定,旨在解决不同数据库系统间的互操作性问题。作为首个跨平台数据库访问标准,它通过抽象层屏蔽数据库差异。
架构解析:
- 应用程序:调用ODBC API提交SQL请求
- 驱动程序管理器:加载/卸载驱动程序,管理连接池
- 数据库驱动:厂商提供的具体实现(如MySQL ODBC Driver)
- 数据源:通过DSN(Data Source Name)配置连接参数
// C语言使用ODBC示例
#include <sql.h>
#include <sqlext.h>
SQLHENV env;
SQLHDBC dbc;
SQLHSTMT stmt;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
SQLConnect(dbc, "MySQL_DSN", SQL_NTS, "user", SQL_NTS, "pass", SQL_NTS);
SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);
SQLExecDirect(stmt, "SELECT * FROM employees", SQL_NTS);
- 优势:
- 支持异构数据库访问(Oracle到SQL Server无缝切换)
- 与语言无关(C/C++/Python等均可调用)
- 局限:
- 配置复杂度高(需手动管理DSN)
- 性能开销大于原生驱动
2.32 ADO(ActiveX Data Objects)
作为微软COM体系的核心组件,ADO为VB、ASP等语言提供高层数据库访问接口,通过OLE DB底层驱动实现数据操作。
核心对象模型:
- Connection:管理数据库连接
- Command:执行SQL语句或存储过程
- Recordset:封装查询结果集
' VBScript使用ADO示例
Set conn = CreateObject("ADODB.Connection")
conn.Open "Provider=SQLOLEDB;Data Source=.;Initial Catalog=Northwind;User ID=sa;"
Set rs = conn.Execute("SELECT * FROM Products WHERE Price > 20")
Do Until rs.EOFWScript.Echo rs("ProductName") & " - " & rs("Price")rs.MoveNext
Loop
演进与替代:
- ADO.NET:.NET Framework中的现代化替代方案,支持断开式数据集
- Entity Framework:基于LINQ的ORM框架,进一步简化数据操作
2.33 JDBC(Java数据库连接)
架构分层:
- JDBC API:提供
java.sql
和javax.sql
接口 - JDBC Driver Manager:加载数据库驱动(如
mysql-connector-java
) - JDBC Driver:实现厂商特定协议(Type 4纯Java驱动为主流)
连接模式演进:
- 基本连接:
DriverManager.getConnection()
- 连接池优化:HikariCP/Druid管理资源复用
- 分布式事务:通过JTA(Java Transaction API)支持
// Java 8+ 使用Try-with-resources简化JDBC操作
try (Connection conn = DataSource.getConnection();PreparedStatement stmt = conn.prepareStatement("INSERT INTO users(name,email) VALUES(?,?)")) {stmt.setString(1, "李雷");stmt.setString(2, "lilei@example.com");stmt.executeUpdate();
}
2.34 ORM(对象关系映射)框架
通过元数据映射(XML/注解)将数据库表结构转化为面向对象模型,实现以下目标:
- 消除手动编写CRUD SQL
- 支持延迟加载(Lazy Loading)关联数据
- 提供跨数据库方言抽象
实现对比:
框架 | 语言 | 特点 | 适用场景 |
---|---|---|---|
Hibernate | Java | 全自动映射,HQL查询语言 | 复杂领域模型 |
MyBatis | Java | SQL与代码解耦,灵活度高 | 需精细控制SQL |
SQLAlchemy | Python | 支持ORM和原生SQL双模式 | 数据分析和Web开发 |
Entity Framework | C# | LINQ集成,Code First迁移 | .NET生态应用 |
# SQLAlchemy ORM示例
from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class User(Base):__tablename__ = 'users'id = Column(Integer, primary_key=True)name = Column(String(50))email = Column(String(120))# 查询操作
session.query(User).filter(User.name.like('%张%')).all()
- 优点:开发效率提升50%以上,维护成本降低
- 缺点:复杂查询可能生成低效SQL,需手动优化
2.4 数据库引擎
数据库引擎(Database Engine
)是数据库管理系统的核心组件,负责数据的存储、检索、事务处理以及并发控制。它直接决定了数据库的性能特性、可靠性及适用场景。
2.41 数据库引擎核心组件
(1)存储管理
- 数据组织:定义数据在磁盘上的存储结构(如B+树、LSM树)
- 页管理:以固定大小(通常4KB~16KB)管理磁盘数据块
- 缓冲池:通过内存缓存(Buffer Pool)减少磁盘I/O,提升读写效率
(2) 事务处理
- ACID实现:
- 原子性:依赖Undo Log回滚机制
- 隔离性:通过MVCC(多版本并发控制)或锁机制实现
- 持久性:Redo Log确保提交数据持久化
- 日志系统:WAL(Write-Ahead Logging)协议保障故障恢复
(3) 查询处理
- 解析器:将SQL转换为抽象语法树(AST)
- 优化器:基于代价模型生成最优执行计划
- 执行器:调用存储引擎接口获取数据
(4)索引管理
- 索引类型:B+树、哈希索引、全文索引、空间索引
- 自适应优化:动态调整索引结构(如InnoDB的自适应哈希索引)
2.42 主流数据库引擎对比
引擎 | 适用场景 | 核心特性 | 局限性 |
---|---|---|---|
InnoDB | OLTP事务处理 | - 支持ACID事务 - 行级锁 - 聚簇索引组织表 - 外键约束 | 高并发写入时Undo Log膨胀风险 |
MyISAM | 读密集型分析 | - 表级锁 - 全文索引 - 压缩存储格式 | 不支持事务,崩溃后数据易损坏 |
RocksDB | 嵌入式/高吞吐写入 | - LSM树结构 - 高压缩率 - 分层存储优化 | 范围查询性能较弱 |
Memory | 缓存/临时表 | - 全内存存储 - 哈希索引加速查询 | 宕机数据丢失,不支持变长字段 |
ColumnStore | 实时分析(OLAP) | - 列式存储 - 向量化计算 - 数据压缩优化 | 事务支持有限,延迟较高 |
引擎切换示例(MySQL):
-- 创建表时指定引擎
CREATE TABLE log_events (id BIGINT PRIMARY KEY,content TEXT
) ENGINE = MyISAM;-- 动态修改引擎
ALTER TABLE log_events ENGINE = InnoDB;
2.43 引擎选型策略
- 工作负载类型:
- OLTP:InnoDB、SQL Server的Microsoft SQL Engine
- OLAP:ClickHouse的MergeTree、Amazon Redshift
- 数据规模:
- 海量数据:LSM树引擎(Cassandra、ScyllaDB)
- 中等数据:B+树引擎(InnoDB)
- 一致性要求:
- 强一致:支持ACID的引擎(InnoDB)
- 最终一致:AP架构引擎(DynamoDB)
OLTP
(Online Transaction Processing,联机事务处理)和OLAP
(Online Analytical Processing,联机分析处理)是数据库领域的两种不同应用场景,分别用于处理日常事务操作和数据分析。它们在设计目标、数据结构、操作类型和应用场景上有显著区别。
OLTP(联机事务处理)
OLTP 是一种面向事务处理的数据库系统,主要用于实时处理和管理日常业务操作。它的核心目标是支持高并发的事务操作,确保数据的实时性和一致性
。特点
- 高并发性:支持大量用户同时进行操作,例如银行转账、在线购物等。
- 低延迟:操作响应时间非常短,用户体验至关重要。
- 事务性:强调 ACID 特性(原子性、一致性、隔离性、持久性),确保数据的正确性和完整性。
- 数据更新频繁:主要涉及数据的插入、更新、删除等操作。
- 面向行存储:数据存储和操作通常是针对单行或少量行的操作。
- 规范化设计:数据通常按照规范化的模式进行存储,减少数据冗余。
应用场景
- 银行系统:存款、取款、转账等。
- 电商网站:商品购买、订单处理、用户登录等。
- 在线订票系统:机票、火车票预订等。
- 企业资源规划(ERP)系统:订单管理、库存管理等。
常见数据库
- MySQL:开源关系型数据库,支持事务,适合中小型应用。
- PostgreSQL:开源关系型数据库,支持复杂事务,适合高可用性需求。
- Oracle:商业数据库,强大的事务处理能力,广泛用于企业级应用。
- Microsoft SQL Server:商业数据库,适用于 Windows 环境下的企业应用。
OLAP(联机分析处理)
OLAP 是一种面向数据分析的系统,主要用于从大量数据中提取有价值的信息,支持复杂的查询和数据分析。它的核心目标是帮助决策者
快速获取数据洞察,支持业务决策
。特点
- 数据分析:主要用于数据的汇总、统计、分析和多维度查询。
- 数据量大:通常处理的数据量非常大,数据来源可能是多个 OLTP 系统。
- 面向列存储:为了优化分析查询,数据通常以列存储的方式组织。
- 多维数据模型:支持多维数据模型(如星型模型、雪花模型),便于从不同角度分析数据。
- 数据冗余:为了提高查询效率,数据可能经过预处理和冗余存储。
- 读多写少:主要操作是读取和分析数据,写入操作较少。
应用场景
- 数据仓库:存储企业历史数据,支持复杂查询和报表生成。
- 商业智能(BI):支持数据挖掘、趋势分析、预测等。
- 市场分析:分析销售数据、客户行为等。
- 财务分析:生成财务报表、预算分析等。
常见工具
- 数据仓库系统:如 Amazon Redshift、Google BigQuery、Snowflake。
- 分析数据库:如 Apache Hive、Presto。
- BI 工具:如 Tableau、Power BI、QlikView。
三、相关概念中英文表格
(1)数据库基础
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
关系型数据库 | Relational Database (RDB) | 基于关系模型的数据库,使用二维表结构(如MySQL、Oracle) |
非关系型数据库 | NoSQL Database | 非结构化数据存储(键值、文档、图、时序等类型) |
数据库模式 | Database Schema | 数据库的全局逻辑结构定义(表、字段、关系约束) |
数据字典 | Data Dictionary | 存储元数据的系统表(如表结构、索引信息) |
数据库实例 | Database Instance | 运行中的数据库进程与内存结构的集合 |
数据库集群 | Database Cluster | 多个数据库节点协同工作的集合(如Galera Cluster) |
数据库分片 | Database Sharding | 水平拆分数据到多个物理节点(如按用户ID哈希分片) |
数据库快照 | Database Snapshot | 某一时间点的数据静态副本(用于备份或分析) |
(2)存储引擎与数据结构
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
B+树 | B+ Tree | 多路平衡搜索树,用于磁盘索引(InnoDB默认结构) |
LSM树 | Log-Structured Merge Tree | 高写入吞吐数据结构(RocksDB、Cassandra核心) |
跳表 | Skip List | 多层链表结构,用于内存数据库索引(Redis Sorted Set实现) |
列式存储 | Columnar Storage | 按列组织数据(ClickHouse、Redshift核心设计) |
内存数据库 | In-Memory Database | 数据常驻内存(Redis、MemSQL) |
分布式文件系统 | Distributed File System | 跨节点文件存储(HDFS、Ceph) |
段页式存储 | Segment-Page Storage | 物理存储管理方式(Oracle ASM、MySQL表空间) |
压缩算法 | Compression Algorithm | ZSTD(RocksDB)、LZ4(Kafka)、Snappy(Parquet) |
(3)事务与并发控制
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
ACID属性 | ACID Properties | 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) |
事务隔离级别 | Transaction Isolation Levels | 读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)、串行化(Serializable) |
乐观锁 | Optimistic Locking | 通过版本号检测冲突(CAS机制) |
悲观锁 | Pessimistic Locking | 预先加锁(行锁、表锁) |
共享锁 | Shared Lock (S Lock) | 允许并发读,阻止写操作 |
排他锁 | Exclusive Lock (X Lock) | 独占资源,阻止其他读写 |
两阶段提交协议 | Two-Phase Commit (2PC) | 分布式事务协议(协调者与参与者交互) |
CAP定理 | CAP Theorem | 一致性(Consistency)、可用性(Availability)、分区容忍性(Partition Tolerance)三选二 |
(4)查询处理与优化
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
查询优化器 | Query Optimizer | 生成最优执行计划(基于规则/代价模型) |
执行计划 | Execution Plan | 查询的具体操作步骤(全表扫描、索引扫描、嵌套循环连接等) |
索引下推 | Index Condition Pushdown (ICP) | 将过滤条件下推到存储引擎处理(减少回表次数) |
谓词推导 | Predicate Derivation | 通过逻辑规则简化查询条件 |
物化视图 | Materialized View | 预计算并存储查询结果(Oracle、Snowflake支持) |
并行查询 | Parallel Query Execution | 多线程处理查询(如Greenplum MPP架构) |
向量化执行 | Vectorized Execution | 批量处理数据单元(ClickHouse每秒亿级数据处理) |
(5)高可用与容灾
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
主从复制 | Master-Slave Replication | 异步/半同步数据同步(MySQL Replication) |
多主复制 | Multi-Master Replication | 多节点可写(Galera Cluster) |
故障转移 | Failover | 主节点故障时自动切换到备节点 |
脑裂问题 | Split-Brain | 集群网络分区导致数据不一致 |
数据冗余 | Data Redundancy | RAID、EC(纠删码)技术保障数据可靠性 |
逻辑备份 | Logical Backup | 导出SQL语句(mysqldump) |
物理备份 | Physical Backup | 复制数据文件(Percona XtraBackup) |
时间点恢复 | Point-in-Time Recovery (PITR) | 基于WAL日志恢复到指定时间点 |
(6)分布式数据库
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
一致性哈希 | Consistent Hashing | 分布式数据分片算法(Cassandra、DynamoDB使用) |
分片键 | Shard Key | 数据分片依据字段(如用户ID) |
数据局部性 | Data Locality | 计算靠近存储(Hadoop HDFS数据本地化) |
最终一致性 | Eventual Consistency | 数据副本经过一段时间后达成一致(Cassandra默认模式) |
分布式事务 | Distributed Transaction | 跨节点事务(Google Spanner TrueTime API) |
共识算法 | Consensus Algorithm | Paxos、Raft(Etcd)、ZAB(ZooKeeper) |
联邦查询 | Federated Query | 跨多个数据源联合查询(Presto、Trino) |
(7)数据模型
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
层次模型 | Hierarchical Model | 树形结构(早期IBM IMS) |
网状模型 | Network Model | 图结构(CODASYL标准) |
文档模型 | Document Model | JSON/BSON格式(MongoDB) |
键值模型 | Key-Value Model | 简单键值对(Redis、DynamoDB) |
图模型 | Graph Model | 节点与边(Neo4j、TigerGraph) |
时序模型 | Time-Series Model | 时间戳索引(InfluxDB、TimescaleDB) |
宽列模型 | Wide-Column Model | 列族存储(Cassandra、HBase) |
(8)安全与合规
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
角色访问控制 | Role-Based Access Control (RBAC) | 按角色分配权限(DBA、ReadOnly User) |
透明数据加密 | Transparent Data Encryption (TDE) | 数据库文件级加密(Oracle、SQL Server支持) |
数据脱敏 | Data Masking | 敏感信息替换(如手机号中间四位****) |
SQL注入防护 | SQL Injection Prevention | 参数化查询(Prepared Statement) |
GDPR合规 | General Data Protection Regulation | 欧盟数据保护法规(要求数据可删除、可审计) |
审计日志 | Audit Log | 记录所有数据操作(如MySQL Enterprise Audit) |
数据血缘 | Data Lineage | 追踪数据来源与变换过程(Apache Atlas) |
(9)云与新兴技术
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
数据库即服务 | Database as a Service (DBaaS) | 云托管数据库(AWS RDS、Azure Database) |
无服务器数据库 | Serverless Database | 按需自动扩缩容(PlanetScale、Aurora Serverless) |
HTAP数据库 | Hybrid Transactional/Analytical Processing | 同时支持事务与分析(TiDB、Google F1) |
边缘数据库 | Edge Database | 靠近数据源的轻量级数据库(SQLite Edge、Redis Edge) |
量子数据库 | Quantum Database | 基于量子计算的数据库原型(学术界研究阶段) |
区块链数据库 | Blockchain Database | 不可篡改的分布式账本(BigchainDB) |
向量数据库 | Vector Database | 存储与检索高维向量(Milvus、Pinecone) |
(10)工具与生态系统
中文术语 | 英文术语 | 定义与扩展 |
---|---|---|
ETL工具 | Extract-Transform-Load | 数据集成工具(Informatica、Talend) |
BI工具 | Business Intelligence Tool | 数据分析可视化(Tableau、Power BI) |
CDC工具 | Change Data Capture | 数据变更捕获(Debezium、Maxwell) |
数据库监控 | Database Monitoring | Prometheus + Grafana、Percona Monitoring |
数据目录 | Data Catalog | 元数据管理系统(Alation、Apache Atlas) |
数据湖 | Data Lake | 原始数据存储仓库(AWS S3 + Apache Iceberg) |
数据网格 | Data Mesh | 去中心化数据架构(强调领域自治与产品化) |