MySQL(一)序
开坑原因
本文的初心是想总结自己这几年对数据库的使用。希望现在回头看,可以总结并归纳一些在数据库使用上的惯例。
存储工具如何出现
P.S. 按出现时间顺序,并不表示优劣,在不同情境中,需使用不同的存储工具。
无数据库(约公元1960)
出现原因
需要管理越来越多的数据
例子
层次模型和网络模型的文件系统:将数据存入树形结构的文件夹中。
关系型数据库(约公元1970)
出现原因
无数据库时不方便表达关联关系,为了方便描述关系(one:one, one:more, more:more),引入了关系型数据库。
例子
以表结构为核心的关系模型,比如MySQL,Oracle等。
非关系型数据库(约公元2000)
出现原因
由于性能要求以及不断新增的业务需求,导致传统的关系型数据库显得太重了(比如,在一张上百万数据的表中,增加一个字段的代价非常大),急需一种轻量化的存储数据方式。
例子
- 文档型数据库(Document-Oriented)
- 键值数据库(Key-Value Database)
- 列式存储数据库(Column-Family)
- 图数据库(Graph-oriented)
为什么选择了MySQL
- MySQL免费。任何一个学生和个人开发者都可以任意使用。
- MySQL开源。一个资深程序员可以定制MySQL的源码。
- MySQL流行。LAMP的模式让MySQL搭上了互联网的便车。
LAMP的含义
所有软件全部是开源且免费的。方便个人、中小开发者无门槛开发动态网站。
- Linux,操作系统
- Apache,网页服务器
- MySQL,数据库管理系统(或者数据库服务器)
- PHP脚本语言
概论
设计流程
- 理解需求,并判断该需求是否有存储的需求
- 存储介质(文件、缓存、数据库)以及存储引擎的选择
- 表结构的设计和索引的构建
- 数据库的拓展(读写分离、分库、分表等)
- 数据的备份和还原
- 数据的导出
各个流程讲解
存储介质
类型 | 优点 | 缺点 | 常见存储对象 |
---|---|---|---|
文件 | 空间大,效率比较高,加密方便 | 缺乏管理 | 图片、视频等占很多存储空间的类型 |
缓存 | 效率极高 | 空间小,容易丢失 | 热点数据,有时效性的短、快、平的数据等 |
数据库 | 管理方便,解决方案多,安全 | 效率一般,语法需要额外学习 | 用户账号密码、支付账单等 |
表结构的设计和索引的构建
表设计
- 分析需求,列出需要存储的项目,并按类型划分
- 确立主键,以及各个类型之间存在的联系(用于设置外键等)
- 分析查询列,添加索引
- 分析是否需要添加约束(默认值等)
数据库的拓展
在项目运行一段时间之后,最容易出现瓶颈的就是数据库。此时,可以考虑一些方案来降低数据库的压力。
针对个别sql运行慢
- 首先考虑的是找到慢sql,可以通过日志来找到它。
- 通过explain关键字判断根源
- 通过改写sql或者添加索引来优化性能
针对读多写少的数据库(优先考虑使用缓存)
进行读写分离
针对数据量大的数据库
进行分表(水平切分和垂直切分)
数据的备份和还原
在项目有一些用户时,需要保证用户的数据不丢失,需要做好备份工作。可以使用 navicat 的备份
数据的导出
在某些时候,可能会遇到需要导出SQL的需求。可以使用navicat的转储SQL文件
相关推荐
在之前的一篇文章,大概描述了我心目中对新增字段的想法 琐碎的想法(一)代码“优雅”的含义