数据库策略
单机数据库策略
• 硬件资源相对用户的需求体验是成本比较高的;数据库的硬盘存储空间非常珍贵
满足范式的设计原则
三范式
1 所有数据库保存的列必须是原子级,不可分割(只要是关系型数据库自动满足第一范式)
2 基于第一范式当前基础
必须有主键
所有主键必须依赖全部主键内容,不能部分依赖
3 第二范式的一种子集
所有的非主键字段必须全部依赖主键,不能依赖其他非主键字段
三范式的设计目的:
表格的数据绝对不会出现第二次相同内容的字段,最大程度的节省磁盘空间,但是一旦查询会消耗查询资源,三范式可以最大程度的利用时间换取空间
反范式:违反三范式(easymall项目中的的数据库表格单表设计);
最大程度的利用空间换取时间
索引:
• 索引的优化,数据库具有索引的数据结构,可以根据不同的情况,不同的查询条件等等因素,对索引进行针对性的修改完成优化
索引:按照一定规则的数据结构设计,实现在存储在空间的一批介质,这些东西可以
提高寻找的目标的速度;
在数据中,按照一定规则(排序)的数据结构设计,实现存储在磁盘上的一批索引文件,这些文件可以实现快速定位(减少了磁盘I/O次数)目标数据;
mysql的索引结构B+tree的数据结构
B+TREE:数据结构的一种,B-tree,红黑树,二叉树.
磁盘空间记录的是主键id(int + auto_increment)
排序是每个磁盘块记录数据,和整体数据的特点;
三阶-四阶-五阶随着数据量的增加,B+tree这个树可以变得越来越宽,越来越高
I/O次数 永远和阶数m相关
磁盘中存储的不仅可以是主键,也可以是字符串,组合的各种字段数据;
索引的优化,根据查询条件的变化,对索引结构中的使用数据进行调整的过程;
数据库集群策略
单机数据库最终无论如何设计,都会被物理瓶颈限制,到时读写速度无法满足要求;
必须引入分布式的高可用的数据库集群;
分布式高可用的集群策略,基础是主从数据备份;
数据库版本:Perconal版本的5.6mysql
搭建mysql的主从复制
mysql也支持一主多从,多级主从(一主一从结构) 原理如下
Master-slave结构的主从关系,一旦搭建
主节点:开启一个binary.log的二进制日志文件,一旦开启,所有的节点客户端的写操作都会记录在二进制文件中,并且 每次的更新都使用Position的数据保存(第一次update,position 588,insert position 698).
从节点:开启2个线程一个日志,I/O线程,sql线程,和中继日志
I/O线程:登录主节点监听二进制日志,根据position的值判断是否有新的写操作;获取的所有内容都会写入本地一个 中继日志,由sql线程监听中继日志,实现启动本地客户端更新数据保持和主节点数据同步;