数据库开发手册
了解数据库的内部工作原理对于专业人员和软件工程师至关重要。深入了解数据库系统的架构和工作原理,能够帮助优化性能、解决问题,并提高系统的稳定性和安全性。这篇文章将帮助您了解为什么深入学习数据库内部工作原理对于专业发展和软件工程技能提升至关重要。
介绍
目录
数据库在现代计算系统中扮演着至关重要的角色,为数据的高效存储、检索和管理提供了基础。深入了解数据库的内部工作原理对于数据库专业人员和任何希望提升软件工程技能的个人来说都是宝贵的资产。
数据库的关键作用
数据库是信息系统的核心,承担了多项关键职责:
- 数据存储: 提供了结构化和持久化的数据存储方式,确保数据安全和可靠性。
- 数据检索与处理: 能够快速、高效地检索和处理大量数据,支持复杂的查询和分析操作。
- 数据管理: 提供了对数据的管理和维护功能,包括数据备份、恢复、安全性和权限管理等。
内部工作原理的重要性
了解数据库的内部工作原理对专业人士和软件工程师至关重要:
- 优化性能: 了解数据库引擎的工作原理有助于优化查询和操作,提高系统性能。
- 故障排除: 理解数据库内部结构有助于快速发现和解决问题,提高系统稳定性。
- 安全性和优化设计: 知晓数据库内部原理可以帮助设计更安全、更高效的数据库架构。
为什么值得学习?
对于数据库专业人士:
- 深入专业领域: 了解数据库内部工作原理是进一步精进专业技能的必要步骤。
- 解决复杂问题: 能够更好地解决复杂的数据库性能和设计问题。
对于其他软件工程师:
- 全面性技能: 了解数据库的内部工作原理可以增加全面性技能,提高工程能力。
- 更好的团队合作: 能够更好地与数据库团队合作,理解数据库需求和优化建议。
了解数据库内部工作原理不仅是一项重要技能,更是通往高效数据管理和卓越软件工程的关键一步。
推荐课程、书籍和讲座
推荐课程
- CMU 数据库系统 (15-445/645): 由Andy Pavlo教授提供,涵盖数据库系统的基础和高级主题
- CMU 高级数据库系统 (15-721): 同样由Andy Pavlo教授提供,专注于数据库系统的更深入内容
- UC Berkeley 数据库系统简介: 提供数据库系统的基础知识
- Stanford 数据库系统实现: 深入探讨数据库系统的实现细节
- Cornell 数据库系统简介: 由Prof. Trummer提供,介绍数据库系统基础
- 构建一个简单的数据库: 一步步指导如何构建基础数据库
推荐书籍
- Stanford 数据库系统:全面介绍数据库系统理论和实践
- 设计数据密集型应用: 详细讨论构建和维护数据密集型应用的挑战和解决方案
- 数据库内部: 探索数据库系统内部结构和算法
- 数据库基础: 深入理解数据库的基本理论
- 数据库系统阅读,第5版: 汇集了数据库领域的关键论文和文章
- 分布式数据库系统原理,第4版: 讨论分布式数据库系统的设计和实现
推荐讲座
推荐博客
- 关系数据库是如何工作的: 描述关系数据库的工作原理和基本概念
- PostgreSQL内部机制: 深入分析PostgreSQL数据库的内部结构和工作原理
- 数据库书籍推荐: 推荐阅读的数据库相关书籍
- 数据库及其类型: 讲述数据库的基本类型和概念
SQL & 关系代数
- CMU 数据库系统 (15-445/645): 同样由Andy Pavlo教授提供,专注于查询规划和优化。
- UC Berkeley 数据库系统简介: 提供SQL和关系代数的基础和进阶知识
查询优化器
CMU 数据库系统 (15-445/645): 同样由Andy Pavlo教授提供,专注于查询规划和优化。
规划模型
子查询优化
Calcite子查询处理:由一只无情的小猫咪提供,分为两部分,分别讨论Calcite处理子查询的不同方法。
连接顺序优化
函数依赖与物理属性
- 1996, 用于排序优化的基本技术, SIGMOD
- 2000, 利用函数依赖进行查询优化, 毕业论文
- 2004, 排序优化的高效框架, ICDE
- 2010, 将分区和并行计划纳入SCOPE优化器, ICDE
Cost Model
统计
- 1984,在关系数据库管理系统中准确估计满足条件的元组数量, SIGMOD
- 1993,限制最坏情况错误在连接结果大小中传播的最佳直方图, ACM Transactions on Database Systems
- 1993,串行直方图的普遍性, VLDB
- 1993,平衡直方图的最佳性和实用性以估算查询结果大小, SIGMOD
- 1993,改进的直方图用于范围谓词的选择性估计, SIGMOD
- 1997,SEEKing真相:关于临时连接成本的真相, VLDB
- 2000,用于不同值的估计误差保证, SIGMOD/PODS
- 2001,用于不同值查询和事件报告的高度准确答案的独特抽样, VLDB
- 2003,直方图的历史, VLDB
- 2005,改进的数据流摘要:Count-Min Sketch及其应用, Journal of Algorithms
- 2007,用于流数据的新估计算法:Count-min可以做更多
- 2009,通过限制基数估计错误的影响来防止糟糕的计划, VLDB
- 2010,重新加载直方图:桶多样性的优点, SIGMOD
- 2014,利用有序字典在SAP HANA中高效构建具有Q-Error保证的直方图, SIGMOD
- 2017,Oracle 12c中的自适应统计信息, VLDB
- 2019,悲观的基数估计:中间连接基数的更严格上界, SIGMOD
- 2019,深度无监督基数估计, VLDB
- 2020,NeuroCard:所有表的一个基数估计器, VLDB
- 大数据的摘要:样本、直方图、小波、草图
查询执行
执行框架
- 1994,Volcano-一个可扩展和并行的查询评估系统, IEEE Transactions on Knowledge and Data EngineeringFebruary
- 2014,Morsel-驱动的并行性:适应多核时代的NUMA感知查询评估框架, SIGMOD
向量化与编译化
- 通用查询执行引擎的开销
- 2005,MonetDB/X100:超级流水线化的查询执行, CIDR
- 2011,为现代硬件高效编译查询计划, VLDB
- 2017,放松操作符融合用于内存数据库:最终使编译、向量化和预取一起工作, VLDB
- 2018,关于编译和向量化查询你想知道的一切但不敢问, VLDB
- 2018,编译查询的自适应执行, ICDE
连接操作
哈希表
Bloom Filter
DDL
关系模型与数据库
Codd's 规则
关系数据模型
关系代数
ER到关系模型
SQL - 概述
事务
隔离级别
并发控制
[1976,在数据库系统中的一致性和谓词锁概念, Communications of the ACM](http://jimgray.azurewebsites.net/papers/on the notions of consistency and predicate locks in a database system cacm.pdf)
网络
- CMU 高级数据库系统 (15-721)
- 2016,慢网络的终结:是时候重新设计了, VLDB
- 2016,利用远程内存和RDMA加速关系数据库, SIGMOD
- 2017,不要挟我的数据:客户端协议重新设计的案例, VLDB
存储
NoSQL系统
- 2006,Bigtable:结构化数据的分布式存储系统, OSDI
- 2007,Dynamo:亚马逊高可用的键值存储, SOSP
- 2008,PNUTS:雅虎的托管数据服务平台, VLDB
- 2010,Cassandra - 分布式结构化存储系统, SOSP
- 2019,PNUTS到Sherpa:从雅虎的云数据库中汲取的教训, VLDB
缓冲管理
- CMU 数据库系统 (15-445/645)
- 1987,关于用内存交换磁盘访问和用内存交换CPU时间的5分钟和5字节规则, SIGMOD
- 2008,五分钟规则20年后,以及闪存如何改变规则, ACM Queue
- 2018,管理数据库系统中的非易失性内存, SIGMOD
- 2018,LeanStore:超越主内存的内存数据管理, ICDE
- 2020,Umbra:具有内存性能的基于磁盘的系统, CIDR
磁盘I/O
- 关于磁盘I/O,第1部分:I/O的各种形式
- 关于磁盘I/O,第2部分:更多I/O形式
- 关于磁盘I/O,第3部分:LSM树
- 关于磁盘I/O,第4部分:B-Trees和RUM猜想
- 关于磁盘I/O,第5部分:LSM树中的访问模式
- 确保数据到达磁盘(LWN)
- 读、写和空间放大 - 选择2个
- 2016,数据访问方法的设计权衡, SIGMOD
- 2016,设计访问方法:RUM猜想, EDBT
B-Tree
LSM-Tree
- 1996,Log-Structured Merge-Tree(LSM-Tree)
- 2014,分形树与Log-Structured Merge(LSM)树的比较
- 2017,WiscKey:SSD意识存储中的键与值分离, TOS
- 2019,基于LSM的存储技术:一份调查
学习型索引结构
- 2018,学习型索引结构的案例
- 2019,学习多维索引
- 2020,XIndex:多核数据存储的可扩展学习型索引
- 2020,RadixSpline:单遍学习索引,aiDM@SIGMOD
- 2020,PGM-index:具有可证明最坏情况下界限的全动态压缩学习型索引,VLDB
- 2020,从WiscKey到Bourbon:Log-Structured Merge Trees的学习型索引
序列化和远程过程调用 (RPC)
数据分区
复制与一致性
- Tick or Tock? Keeping Time and Order in Distributed Databases
- 2012,Consistency Tradeoffs in Modern Distributed Database System Design
- 2020,Strong and Efficient Consistency with Consistency-Aware Durability,FAST 2020
共识
- University of Cambridge Distributed consensus revised,一篇关于共识,特别是 Paxos 和 Paxos 相关算法的精彩论文
- 2014,Ark: A Real-World Consensus Implementation,CoRR
调度
- 基于Raft构建大规模分布式存储系统
- 2016,在关系数据库即服务中进行自动化的需求驱动资源扩展,SIGMOD
- 2019,Anna 中的自动缩放分层云存储,VLDB
- 2020,通过弹性资源调度实现自适应 HTAP,SIGMOD
- 2020,MorphoSys:面向分布式数据库系统的自动物理设计变形,VLDB
基准测试与测试
- 使用go-ycsb对不同数据库进行基准测试(1)
- 用于测试 TiDB 分布式 NewSQL 数据库的混沌工具和技术
- 创建自定义 Sysbench 脚本
- 2010,使用 YCSB 对云服务系统进行基准测试,SOCC