计算机科学:数据库与数据管理概览
本文从计算机科学的角度,对数据库与数据管理进行较为系统的技术梳理,涵盖关系型与非关系型数据库、模式设计与规范化、事务与并发控制、 索引与查询优化、数据仓库与治理以及分布式数据管理等内容,并通过图表示意典型的架构与权衡。
图1:数据库类型在应用中的示意占比(仅示意)。
图2:OLTP、OLAP和流式系统在时延与吞吐上的示意对比。
图3:规范化程度与数据冗余及连接复杂度之间的示意关系。
数据库类型 | 主要数据模型 | 典型场景 | 说明 |
关系型数据库 | 基于行列的表结构,使用SQL模式。 | 事务系统、报表、通用数据存储。 | 强调强一致性、成熟工具、规范化和ACID事务。 |
文档数据库 | JSON/BSON等层次化文档。 | 内容管理、用户画像、模式灵活的应用。 | 模式灵活,适合模型快速演进的场景。 |
键值数据库 | 按键索引的不透明值。 | 缓存、会话、简单配置和状态。 | 追求低时延和简单数据结构。 |
列式数据库 | 按列存储的表数据。 | 分析型场景、数据仓库、OLAP负载。 | 支持高效率扫描和压缩,适合大规模数据。 |
图数据库 | 带属性的点和边。 | 网络关系、推荐系统、路径查询。 | 针对遍历和路径查询进行优化。 |
表1:常见数据库类型及其典型应用场景。
主题 | 描述 | 典型职责 | 工程说明 |
数据建模 | 设计实体、关系和约束。 | 定义模式、主键、外键以及规范化层次。 | 直接影响性能、可维护性和数据质量。 |
事务与ACID | 原子、一致、隔离、持久的操作。 | 保护不变式并管理并发更新。 | 通常通过锁、MVCC或乐观控制实现。 |
索引与查询处理 | 数据访问路径和执行策略。 | 设计和调优索引,分析执行计划。 | 需在写入开销与读取性能之间权衡。 |
数据仓库与OLAP | 面向分析的历史数据和聚合数据。 | ETL流程、星型/雪花模型、多维分析。 | 通常与OLTP系统隔离,以避免负载互相影响。 |
数据治理 | 围绕数据所有权和质量的政策与流程。 | 目录、血缘、访问控制、合规管理。 | 需要工程与业务团队协同推进。 |
表2:数据管理主要主题及工程职责示意。
概念 | 定义 | 适用场景 | 示例 |
主键 | 表中唯一标识一行的字段或字段组合。 | 实体完整性和连接查询。 | 用户ID、订单号等。 |
外键 | 从一个表引用另一表的约束。 | 维持实体之间的关联完整性。 | 订单表中的客户ID。 |
规范化 | 通过结构化设计减少冗余的过程。 | 关系型模式设计、OLTP数据库。 | 如将客户、订单、订单项拆分为多个表并建立关联。 |
反规范化 | 为性能有意引入冗余。 | 报表、缓存、大规模查询场景。 | 为报表预先计算并存储聚合数据。 |
分片(Sharding) | 按某种策略横向拆分数据到多个节点。 | 提升扩展性和可用性。 | 按地区或按用户ID哈希将用户数据分布到不同节点。 |
表3:关系型数据库核心概念及其适用场景示例。
1. 数据模型与数据库类型
数据模型是数据库技术的基础。关系模型通过表、行和列来组织数据,并使用主键和外键表达实体之间的关系;文档数据库则以JSON等文档形式存储层次化结构, 对于模式不稳定或结构复杂的应用更加友好。
键值数据库专注于根据键快速访问值,常用于缓存和会话等场景;列式数据库按列存储数据,便于在分析型负载下进行大规模扫描和聚合;图数据库以点和边来刻画实体与关系, 对路径查询和关系遍历具有天然优势。
2. 关系模式设计与规范化
在关系型数据库中,良好的模式设计有助于避免插入、更新和删除异常,并提升数据质量。规范化是将数据拆分到合适的表结构中、减少冗余的过程,从第一范式到第三范式以及BCNF, 逐步消除不合理的依赖与重复信息。
高度规范化的模式虽然在理论上更优,但在工程实践中可能带来连接次数增多等性能问题。因此,实际系统中常根据查询特征进行适度反规范化,例如对报表和OLAP场景预先存储聚合结果, 在性能与冗余之间寻找平衡。
3. 事务、并发控制与一致性
很多数据库通过ACID性质来提供事务保证:原子性、一致性、隔离性和持久性。原子性确保事务要么全部成功要么完全不发生;一致性维护业务不变式和约束;隔离性避免并发事务之间互相干扰; 持久性则保证提交后的数据在故障后仍然存在。
并发控制常见实现包括基于锁的协议、多版本并发控制(MVCC)以及乐观控制。锁机制使用共享锁和排他锁来控制访问;MVCC通过保存多个版本,使读操作尽量不阻塞写;在分布式系统中,还需要在一致性和可用性之间进行权衡, 选择合适的复制和协调策略。
4. 索引、查询处理与优化
索引为数据提供额外的访问路径,可以显著减少全表扫描的次数。B树索引适合范围和排序查询,哈希索引则更适合等值查询。索引的设计需要深入理解业务查询模式,避免过多索引导致写入成本过高。
查询处理包括SQL解析、关系代数变换和执行计划生成。优化器根据统计信息选择连接顺序、访问路径和索引使用策略。通过查看执行计划,工程师可以识别性能瓶颈,决定是否需要调整模式、索引或重写查询。
5. 数据仓库、OLAP与ETL流程
在线事务处理(OLTP)系统倾向于处理大量小型读写操作,而数据仓库则面向大规模的分析查询。常见的数据仓库建模包括星型和雪花模型,通过事实表和维度表来组织历史和聚合数据。
ETL(抽取、转换、加载)或ELT流程负责将数据从事务系统迁移到分析系统。工程师需要关注数据刷新频率、一致性和缺失值处理等问题。列式存储和并行查询引擎在大规模分析场景中广泛使用。
6. NoSQL、分布式数据库与一致性模型
为应对大规模和高并发需求,NoSQL和分布式数据库应运而生。键值和文档数据库通常支持横向扩展,通过分片和复制分担负载并提高可靠性。
在分布式环境中,一致性模型变得更加丰富。一些系统采用最终一致性,允许不同副本在短时间内出现差异;另一些系统强调强一致性,但需要更多协调开销。CAP定理及各种一致性级别为架构设计提供了分析框架。
7. 数据生命周期、治理与质量
数据管理不仅包括存储和查询,还涵盖数据从产生到归档甚至删除的完整生命周期。数据治理涉及所有权、访问控制、保留策略以及合规要求,例如隐私保护法规。
工程实践中,常通过数据目录、血缘追踪和统一指标定义来提升数据可见性和可用性。良好的治理有助于提高报表和机器学习模型的可信度,而缺乏治理可能导致指标不一致、管道重复建设以及安全风险。
8. 新趋势:湖仓一体与流式数据
近年来,数据湖与数据仓库之间的界限趋于模糊,湖仓一体架构尝试在统一的存储层之上同时支持批处理分析和流式处理。该类平台为模式管理、事务支持和多引擎访问提供基础能力。