一、什么是数据库?
学习数据库前,先了解下什么是数据库?
- 数据(Data):描述事物的符号,可以使数字、文字、图像、声音、语言等。
- 数据库(DataBase):指长期存储在计算机内的、有组织、可共享的数据集合。
- 数据库管理系统(DBMS):数据库系统核心软件之一,是位于用户和操作系统间的数据管理软件。
二、数据库类型
2.1 关系型数据库
概念:关系型数据库建立在关系模型基础上的数据库,借助几何代数等数学概念处理数据库中的数据。简单说关系型数据库是由多张能互相连接的表组成的数据库。
优点:
- 数据使用表结构存储,格式一致,易于维护
- 使用通用SQL语言操作,使用方便,可用于复杂查询
- 数据存储在磁盘中,安全可靠
缺点:
- 读写性能较差,不能满足海量数据高效率读写
- 不节约空间,因为建立在关系模型上,需要遵循某些规则。比如数据中某个字段即使为空,仍然要分配空间
- 固定表结构,灵活度较低
2.2 非关系型数据库
概念:非关系型数据库又被陈伟NoSQL(Not Only SQL)意为不仅仅是SQL.通常指数据通过对象形式存储在数据库中,对象间的关联关系通过每个对象自身属性决定。
优点:
- 非关系型数据库存储格式可以使key-value、文档、图片等。使用灵活,应用场景广泛
- 速度快、效率高。NoSQL可使用硬盘或随机存储器作为载体。
- 海量数据的维护和处理非常轻松 非关系型数据库具有扩展简单、高并发、高稳定、成本低廉的优势
缺点:
- 非关系型数据库不提供SQL支持,学习使用成本高
- 不支持事务,没有保证数据完整性和安全性的可靠方案
- 功能没有关系型数据库完善
三、为什么要使用数据库?
-
数据库可以结构化存储大量的数据信息,方便用户进行有效的检索访问。数据库可以对数据进行分类保存,并且可以提供快速的查询
-
数据库可以有效的保持数据信息的一致性、完整性、降低数据冗余。可以很好的保证数据有效、不被破坏,而且数据库自身有避免重复数据的功能,以此来降低数据的冗余。
-
数据库可以满足应用的共享和安全方面的要求,把数据放在数据库中很多情况也是出于安全方面的考虑。
-
数据库技术能够方便智能化的分析,产生新的有用信息
四、MySQL使用场景
-
web网站系统: 因为MySql数据库的安装配置都非常简单,使用过程中的维护也不复杂,而且性能出色。还有一个非常重要的原因就是Mysql是开放源代码的。
-
日志记录系统: MySql数据库的插入和查询性能都十分高效,如果设计的好在使用MyISAM存储引擎的时候,两者可以做到互不锁定,达到很高的并发性能。所以对需要大量的插入和查询的系统来说,MySQL都是非常不错的选择。比如处理用户的登录日志,操作日志等。
-
数据仓库系统 随着现在数据仓库数据量的飞速增长,我们需要的存储空间越来越大。数据量的不断增长,使数据的统计分析变得越来越低效,也越来越困难。下面是几个主要的解决思路。
-
采用昂贵的高性能主机以提高计算性能,用高端存储设备提高 I/O 性能,效果理想,但是成本非常高;
-
通过将数据复制到多台使用大容量硬盘的廉价 PC Server 上,以提高整体计算性能和 I/O 能力,效果尚可,存储空间有一定限制,成本低廉;
-
通过将数据水平拆分,使用多台廉价的 PC Server 和本地磁盘来存放数据,每台机器上面都只有所有数据的一部分,解决了数据量的问题,所有 PC Server 一起并行计算,也解决了计算能力问题,通过中间代理程序调配各台机器的运算任务,既可以解决计算性能问题又可以解决 I/O 性能问题,成本也很低廉。
五、MySQL系统架构
-
连接层:最上层一些客户端和连接服务。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可以基于SSL的安全链接,服务器也会为安全接入的每个客户端验证其所具有的操作权限。
-
服务层:主要完成大部分核心服务功能。包括查询解析、分析、优化、缓存、以及所有内置函数,所有跨存储引擎的功能都在该层实现,包括触发器、存储过程、视图等。
1.SQL接口:接收用户SQL命令,返回用户操作结果
2.解析器:SQL传递到解析器时会被解析器验证和解析。MySQL是DBMS系统,无法直接理解SQL语句。Parser负责解析
3.优化器:SQL在执行前会使用查询优化器对SQL进行优化
4.缓存:查询缓存,如果查询缓存有命中的查询结果直接返回。
-
引擎层:存储引擎真正负责了MySQL中数据存储和提取,服务器通过API与存储引擎进行通信,不同的存储引擎具有功能不同
-
存储层:该层主要是将数据存储在运行于该设备的文件系统上,并完成与存储引擎的交互
SQL执行过程:
- 客户端发送执行SQl给服务器
- 服务器检查缓存,如果命中则返回缓存中的查询结果,否则进入下一步骤
- 服务器端进行SQL解析、预处理、再由优化器生成对应的执行计划
- MySQL根据优化器生成执行计划,再调用存储引擎的API执行查询
- 将结果返回给客户端