在使用淘宝网进行购物过程中,当我们查询商品时,实际上是查询淘宝网数据库中的商品;当我们购买某一件商品时,我们是在向淘宝网的数据库的订单中,填写了一条购买信息;当我们去银行办理相关业务,查询账户余额时,是查询银行数据库中我们的个人账户信息;当我们取款时,我们是在修改银行数据库中账户信息的数据。所以,其实我们一直都在使用数据库,通过网络和设备,在与数据库进行交互。一方面数据库可以给应用提供插入、删除、修改、查询数据的功能,另一方面,数据库也能保证数据库再关机之后,数据不丢失,也就是数据的持久化。那么,数据库具体是如何实现的呢?
根据数据库使用场景,总结几条数据库的特性:
- 数据库需要能够存储庞大的数据量
- 数据库需要支持多个应用同时访问,并且保证数据的一致性
- 数据库尽量减少磁盘的存储,按照一定格式存储数据,减少数据冗余
- 数据库要增加数据之间的关联,方便数据查询
- 数据库需要支持持久化的数据存储,断电可以恢复,并且能够故障转移
引申阅读:OLAP与OLTP的区别? OLAP:联机分析处理(Online Analytical Processing) OLTP:联机事务处理(On-Line Transaction Processing)
常见的数据库系统包括Oracle、MySQL、SQL Server等,本文主要是了解MySQL数据库。
MySQL数据库是一种开放源代码的关系型数据库管理系统(关系型数据库-RDBMS,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据,以便于用户理解,关系型数据库这一系列的行和列被称为表,一组表组成了数据库。用户通过查询来检索数据库中的数据,而查询是一个用于限定数据库中某些区域的执行代码。关系模型可以简单理解为二维表格模型,而一个关系型数据库就是由二维表及其之间的关系组成的一个数据组织),除了关系型数据库,现在还有很多非关系型数据库,像Mongodb、Redis等产品。因为RDBMS都支持SQL(SQL是结构化查询语言-Structured Query Language的缩写,是一种专门用来与数据库通信的语言,通过SQL可以从数据库中读写数据),所以,这些也叫NoSql数据库。
涉及数据库需要理解两个概念,数据库与数据库实例:
数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;
数据库实例是应用程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等,都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。
下图是MySQL体系结构:
可以简化成下图:
MySQL可以大致划分为三层结构,最上层是MySQL的连接层,主要用于客户端连接管理、授权认证、安全等,包括Connectors、Management Serveices & Utilities、Connection Pool。像大部分C/S结构的应用一样,都需要对客户端的链接进行管理、鉴权、认证等。当然,MySQL提供多种语言的连接方式,如:JDBC、ODBC等。
第二层架构中包含了MySQL大部分的核心服务功能,包括解析(Parser)、优化(Optimizer)、缓存(Cache)以及查询SQL接口(SQL Interface,包括内置函数、DML、DDL、存储过程、触发器、视图)等。
第三层包含了存储引擎、日志、文件等,存储引擎负责MySQL中数据的存储和提取。每个存储引擎都有它的优势和劣势,服务器通过API与存储引擎进行通信,这些接口屏蔽了不同引擎之间的差异,使得这些差异对上层的查询过程透明。MySQL与其他数据库最大的区别就是其插件式的表存储引擎,不同存储引擎保存数据和索引的方式不同,这里需要注意的是存储引擎是基于表的,不是基于数据库。另外,MySQL在进行数据库的更改等操作时,会产生二进制日志,记录了数据库的。当然,不同存储引擎对于日志的实现和作用也是不同的。常用的存储引擎包括InnoDB、Myisam等,我们也可以根据特定场景实现定制的存储引擎。
- 《高性能MySQL》
- 《MySQL技术内幕:InnoDB存储引擎》
- https://blog.leonshadow.com/763482/527.html