数据库系统介绍

之前使用数据库已经有段时间了,最先接触的是 MySQL,当时写了个管理系统,使我养成了对编程的兴趣,在当时更侧重于实践,也就是把 MySQL 用好,现在想了下当时也可能没有用好,因为 MySQL 有很多优化的理论和哲学当时没有接触到。最近准备深入学习了一下,这篇文章是这个系列的第一篇,先简单聊下数据库。

数据库的是用来做什么的

数据库是用来做什么的?这是个无意义的话题,大家都知道数据库是用来存储数据的,可以存储文本、数值、音视频等文件,使用数据库以格式化的存取和规范化的获取给我们的使用带来了极大的便利,但是在数据库没有出现的时候存储却很麻烦,一般是直接放把数据放在文件里,更远古甚至通过手工记录,我曾经学过一个使用文本文件记录数据的简单系统,通过文件 IO 进行添加和读取数据,操作是想当麻烦,麻烦是一方面,如果数据量增大,查询是最大的问题,现在我们通过数据库存取数据真太方便了。

怎么学数据库

在我第一次接触到 MySQL 数据库时我认为学数据库就是学习些 SQL,敲一些黑窗口的 MySQL 命令还有就是设计一个数据库。当时眼界太低,或者说我接触的太少,现在如果问我数据库学啥?那我应该会回答:SQL、索引、事务、锁、隔离级别、MySQL 缓存、存储引擎、SQL 优化等方面,数据有很多种类,不止 MySQL(关系型),还有非关系型的 redis,mongodb 等,不同类型有不一样的应用场景,这些也是需要了解的。

对于一个新手,不建议第一次就对数据库挖那么深,深挖反而会让人只关注局部而丧失了解整体,另一方面容易劝退人,先会用,设计出一个符合使用场景的数据库,然后了解更深层次的。

数据库不止 SQL

一些人写了一些 SQL 便沾沾自喜,以为自己已经精通数据库了,其实只是入了门,开发数据库系统堪比开发一个操作系统,如果这样看数据库系统就太小觑它了。数据库系统有客户端,也就是连接服务端的软件,服务端 Server,是 MySQL 系统的核心(存储和管理数据),另外是 SQL,它是一个语言规范,例如 MySQL 就实现了这个规范因此可以使用 SQL 进行存取数据,在 Server 深层是存储引擎,例如 MySQL 的 InnoDB 和 MyISAM,如果想要深入理解数据库存储引擎是必须要了解的。

横纵扩展,当业务量增加,表中数据与日俱增,单机无法满足对数据的查询和写入需求,然后就要求系统具有横向扩展能力,即集群模式,主流的数据库系统都具有这个能力,这方面也是数据的核心能力。还有,数据是一个企业最宝贵的资源,企业中的数据也都往往存放多份,如果出问题了,就牵扯到的故障恢复,日志等一些数据库技术,这些也是一个企业级数据避暑可少的功能。

数据库远不止 SQL 语句!

数据库的理论层面

关系数据库的形成是基于集合论和关系代数,著名的有笛卡尔积、Armstrong 公理等理论,在数据库底层优化就用到了这些理论,所以有时候写了一个 bad SQL 数据库也能自动优化,学习和了解这些可以帮助我们更好的设计数据库。

数据库的百花齐放

关系型数据库发展若干年之后非关系型数据库成为数据库发展的另个方向,在大数据大信息化时代,信息纷繁芜杂,传统数据库难以适应,非关系型应运而生。

关系型数据库往往以二维表为基础的格式化数据,非关系型数据库以键值对或者类 JSON 的数据存储。关系型数据库代表以 MySQL、Oracle DB、SQL Server、PostgreSQL,非关系数据代表以 MongoDB、redis、Hbase 等。不同的数据库有不同的特点,在互联网日益发展的今天没有一个数据库系统是通用的,他们各有所长,不同的数据库往往可以配合使用,以满足互联网“三高”的需求。

可以参考以下了解更多数据库信息:

  • 《几种常用非关系型数据库》https://blog.csdn.net/aaronthon/article/details/81714528
  • 《常见的关系型数据库和非关系型数据及其区别》https://www.cnblogs.com/jerryliuxin/p/12194613.htm