[译] 数据库是如何工作(一)介绍

原文在这里how-databases-work

当我回想涉及到关系数据库的知识点时,我不禁觉得若有所失。它们很多地方会用到。会有很多不同的数据库:小而有用的 SQLite 到强大的 TealData。但是,只有很少的文章解释数据库是如何工作的。你可以自己谷歌一下 “关系数据库是如何工作”,看看结果数量是多少。此外,那些文章都是很短的。而现在,如果你在寻找最时髦的技术(大数据,NoSQl 或者 JavaScript),你会找到更多深入的文章解释他们是如何工作 这是因为关系数据库太旧,太无聊,以致于不能在大学课程、论文和书籍之外解释吗?

作为开发者,我讨厌使用我不懂的东西。再者,数据库已经被使用40多年,肯定是有原因。这些年来,我花数百个小时去真正理解这些我每天用的黑盒子。关系数据库是很有趣的,因为它们(的理论)基于可用性和可重性(useful and reusable concepts)。如果你对数据库感兴趣,而你从来没有时间或者意愿去深入研究这个大概念, 你会喜欢这篇文章。 尽管这文章的标题是明确,但本文的目的不是如何使用数据库。所以,(本文假定)你应该明白如何写简单的join查询和基本的CRUD操作;否则你可能无法理解这篇文章。这是你唯一需要知道的事,我会解释其他所有的东西。 我将会从一些计算机科学的东西开始讲,比如是时间复杂度。我知道有些人会讨厌这概念,但如果你不理解这些东西,你将无法理解数据库里面那些精巧的东西。由于这是个大主题,我将会只关注我认为重要的东西,即:数据库处理 SQL 的方式。我将只介绍数据库背后的概念,以便读到文章的最后,你会对(执行语句时)数据库引擎下面发生什么有一个清晰的概念。 由于这是一篇设计很多算法和数据结构的技术长文,所有需要花多点时间去阅读。一些概念是很难理解的;你可以跳过它,这也能得到整体的概念。 为了让你更容易理解知识,这文章或多或少分成3部分

  • 低级和高级数据库组件的概述
  • 查询优化过程的概述
  • 事务和缓冲池的管理的概述

(由于原本太长太长了,我把它分成几篇文章,陆续更新)

  1. 回到原点(重新讲下算法)
  2. 全文概述
  3. 客户端管理
  4. 查询关联器
  5. 数据管理器
  6. 总结 在写这篇文章之前,我知道这个主题有多大,我知道要写一篇关于它的深入文章需要时间。事实证明,我非常乐观,而且我花了比预期多两倍的时间,但我学到了很多东西。 如果您想要对数据库有一个很好的概述,我建议您阅读研究论文《数据库系统的体系结构》对数据库有很好的介绍(共110页),而且非计算机专业人士也能读懂。这篇文章帮助我找到了本文的写作计划,但没有像我的文章那样关注数据结构和算法,而是更多地关注架构概念。 如果您仔细阅读本文,您现在应该了解数据库的强大功能。由于这是一篇很长的文章,让我提醒一下我们所看到的内容:
  • B+ Tree索引的概述
  • 数据库的全局概述
  • 概述基于成本的优化,重点关注连接运算符
  • 缓冲池管理概述
  • 事务管理概述

但是数据库包含更多的奇淫巧技。例如,我没有谈到一些棘手的问题,例如

  • 如何管理集群数据库和全局事务
  • 如何在数据库仍在运行时拍摄快照(snapshot)
  • 如何有效地存储(和压缩)数据
  • 如何管理内存

因此,当您必须在bug多多的NoSQL数据库和坚如磐石的关系数据库之间进行选择时,请三思而后行。不要误会,一些 NoSQL 数据库是很好的。但它们毕竟太年轻,并只能解决少数应用关注的特定问题。 最后说一句,如果有人问你数据库的原理是什么,你不用逃之夭夭,现在你可以回答:

posted @ 2019-05-05 21:26  JOJO_2046  阅读(647)  评论(0编辑  收藏  举报