跳转至

数据库

数据库是结构化信息或数据(一般以电子形式存储在计算机系统中)的有组织的集合,通常由数据库管理系统 (DBMS) 来控制。在现实中,数据、DBMS 及关联应用一起被称为数据库系统,通常简称为数据库。

众所周知,程序就是通过算法处理数据,然后达到某些预期的效果的方式。

数据库最早于 1960 年诞生,经过长时间的发展,现在已经非常专业和成熟了。现在软件开发也从之前的“自己处理和管理数据”变成了“交由专业的数据库管理系统进行管理”,程序只负责与数据库管理系统进行交互,简化软件开发的复杂度。

Note

推荐阅读《数据密集型应用系统设计》(DDIA)的第二章《数据模型与查询语言》。对数据库类型有一个初步的了解。

关系型数据库

关系型数据库分为两部分进行学习的。

第一部分:学习 SQL 语句(结构化查询语言)。数据库管理系统通过处理 SQL 语句,在内部进行数据的处理,最后将结果以某种形式返回。

第二部分:了解数据库管理系统的内部运行。既然数据库用起来这么方便,那么它是怎么做到的呢?

SQL 基础入门

书籍推荐

  • 《MySQL 必知必会》
  • 《MySQL 是怎样运行的:从根儿上理解 MySQL》
  • 《MySQL 技术内幕:InnoDB 存储引擎》

第一本书,《MySQL 必知必会》,阅读时长大概1周。了解关系型数据库的一些基本概念,和基本的 SQL 语句的使用。完成后可以做到:按照自己需求创建数据库,拼写增删改查的语句。

任务说明

  • 在 GNU/Linux 操作系统下安装任意关系型数据库,包括配置、创建普通用户和管理操作权限(不用记,走一遍流程就大概知道要先干什么再干什么)。
  • 学会 SQL 基本语法(CRUD)——《MySQL 必知必会》讲得很详细,需要进行实践操作。

数据库的运行(必备知识)

书籍推荐

第二本书,《MySQL 是怎样运行的:从根儿上理解 MySQL》。这本书可以在大二想要好好学一学数据库时阅读,它是一个过渡书,比《必知必会》深入一些,但语言通俗易懂,容易理解,可以为后续学习数据库原理打下基础。

第三本书,《InnoDB 技术内幕》。还没看,待补充,听说很好。

还有“帆船书”,《高性能 MySQL》等。

课程推荐

  • CMU 15445(数据库系统设计):CMU 的神课,讲述数据库底层原理,基于 CMU 开发的数据库系统 Bustub 添加更多功能的支持。如果你想深入了解数据库的底层,那么这门课非常适合你。即使你以后从事后台开发,了解数据库底层原理也对你大有裨益。Andy Pavlo 也是数据库领域非常有名的教授,课堂效果很好。
  • CMU 15721(数据库系统实现):CMU 的另一门神课,讲述数据库的实现,基于 CMU 开发的数据库系统 Scatter。
  • MIT 6.830:使用 Java 实现一个单机数据库。这门课程也值得推荐,毕竟是 MIT 的课程。
  • UCB CS186:数据库系统导论。

非关系型数据库

非关系型数据库(NoSQL Database)是指不采用关系模型的数据库。

书籍推荐

  • 《Redis 设计与实现》

适合学习的开源代码:

  • Redis:使用 C 语言实现,基于内存,高性能的键值数据库。Redis 中文注释版
  • Leveldb:使用 C++ 实现,基于 LSM-Tree 的键值数据库。代码量万行左右,强烈推荐大家看看。
  • pingCAP 系列:TiKV,TiDB 这些,由国人主导,网上资料相对多点。

其他学习资料

后续学习

在掌握了一个存储引擎之后,如果你希望从单机引擎过渡到分布式系统,强烈推荐阅读《数据密集型应用系统设计》。