目录
Mycat个人心得笔记(一)
一.简介
MyCat的目标是:
二.数据库策略(单击策略,集群策略)
一.单机
二.策略:三范式原则(可以去看看相关技术博客)
◆ 第一范式(1NF):
◆ 第二范式(2NF):
◆ 第三范式(3NF):
三.范式总结:
四.最终结论:早期使用的单机设计模式;解决利用查询时间效率换区空间资源的节省;
五.企业中主流设计原则:反三范式
六.索引
三.数据库集群
一.数据库的集群结构:
二.mysql数据库的主从复制
三.mysql的主从复制原理
下篇博客写如何搭建数据库集群 多台数据库安装
上几篇博客介绍了,Nginx 前端请求并发 Redis集群 缓存处理,数据库方面的技术没有介绍,下面简单介绍下关于数据库集群方面的技术
低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。
早期硬件极其昂贵,系统的并发能力要求不高;如现在的常用的Mysql
强调的是列的原子性,即列不能够再分成其他几列。
考虑这样一个表:【联系人】(姓名,性别,电话)
如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。
首先是 1NF,另外包含两部分内容,一是表必须有一个主键;二是没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分。
考虑一个订单明细表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)。
因为我们知道在一个订单中可以订购多种产品,所以单单一个 OrderID 是不足以成为主键的,主键应该是(OrderID,ProductID)。显而易见 Discount(折扣),Quantity(数量)完全依赖(取决)于主键(OderID,ProductID),而 UnitPrice,ProductName 只依赖于 ProductID。所以 OrderDetail 表不符合 2NF。不符合 2NF 的设计容易产生冗余数据。
可以把【OrderDetail】表拆分为【OrderDetail】(OrderID,ProductID,Discount,Quantity)和【Product】(ProductID,UnitPrice,ProductName)来消除原订单表中UnitPrice,ProductName多次重复的情况。
首先是 2NF,另外非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。
考虑一个订单表【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)主键是(OrderID)。
其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不符合 3NF。
通过拆分【Order】为【Order】(OrderID,OrderDate,CustomerID)和【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)从而达到 3NF。
第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于,2NF:非主键列是否完全依赖于主键,还是依赖于主键的一部分;3NF:非主键列是直接依赖于主键,还是直接依赖于非主键列。
参考文献 https://blog.csdn.net/QingKing520/article/details/52937728
只要不满足三范式设计的表格都要进行拆分处理,造成数据库表格结构极其精简,但是表非常多,使用数据是需要关联查询,满足三范式就不能做冗余字段;
早起,硬盘存储过小,牺牲查询时间效率,换取空间资源的节省
定义:按照一定规则(排序)的组成数据结构.实现存储在磁盘,利用索引快速定位目的数据的一批文件
磁盘最小数据存储为512B 存储都是512的倍数
mysql中的所用数据结构 B+TREE (硬盘中数据的结构)
三阶的b+tree最多帮助查找27条数据,随着数据越来越多,数据库会把b+tree变得越来越高,越来越宽
阶数+1次io 能使用id做索引,能不是使用string类型的user_id,user_name做索引 保证排序
单机数据库无论从设计,从索引的优化,都会最终瓶颈卡在硬件读写速度上现代磁盘150M/S;
单机无法解决海量高并发的数据,最快固态硬盘在传输速度3500M/s左右
数据库的主从复制技术是高可用分布式集群的基础
mysql数据支持一主多从,多级主从;搭建主从结构之前了解主从复制原理
一主一从为结构,了解复制的原理
搭建主从mysql结构时
https://blog.csdn.net/LiuY521/article/details/90749424