Mycat个人心得笔记(一)

                                 Mycat个人心得笔记(一)


目录

                                 Mycat个人心得笔记(一)

一.简介

MyCat的目标是:

二.数据库策略(单击策略,集群策略)

一.单机

二.策略:三范式原则(可以去看看相关技术博客)

◆ 第一范式(1NF):

◆ 第二范式(2NF):

◆ 第三范式(3NF):

三.范式总结:

四.最终结论:早期使用的单机设计模式;解决利用查询时间效率换区空间资源的节省;

五.企业中主流设计原则:反三范式

六.索引

三.数据库集群

一.数据库的集群结构:

二.mysql数据库的主从复制

三.mysql的主从复制原理

                  下篇博客写如何搭建数据库集群 多台数据库安装


一.简介

上几篇博客介绍了,Nginx 前端请求并发  Redis集群 缓存处理,数据库方面的技术没有介绍,下面简单介绍下关于数据库集群方面的技术

  • 一个彻底开源的,面向企业应用开发的“大数据库集群”
  • 支持事务、ACID、可以替代Mysql的加强版数据库
  • 一个可以视为“Mysql”集群的企业级数据库,用来替代昂贵的Oracle集群
  • 一个融合内存缓存技术、Nosql技术、HDFS大数据的新型SQL Server
  • 结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
  • 一个新颖的数据库中间件产品

MyCat的目标是:

低成本的将现有的单机数据库和应用平滑迁移到“云”端,解决数据存储和业务规模迅速增长情况下的数据瓶颈问题。

二.数据库策略(单击策略,集群策略)

一.单机

早期硬件极其昂贵,系统的并发能力要求不高;如现在的常用的Mysql

二.策略:三范式原则(可以去看看相关技术博客)


◆ 第一范式(1NF):

强调的是列的原子性,即列不能够再分成其他几列。 
考虑这样一个表:【联系人】(姓名,性别,电话) 
如果在实际场景中,一个联系人有家庭电话和公司电话,那么这种表结构设计就没有达到 1NF。要符合 1NF 我们只需把列(电话)拆分,即:【联系人】(姓名,性别,家庭电话,公司电话)。1NF 很好辨别,但是 2NF 和 3NF 就容易搞混淆。 

 

◆ 第二范式(2NF):

首先是 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多次重复的情况。 

 

◆ 第三范式(3NF):

首先是 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数据库每生成一条或一批数据存储在磁盘上,
  • 都会对应在索引的数据内添加数据的索引信息,
  • 从而可以利用索引数据快速定义磁盘目的起始地址;
  • 可以帮助查询数据的起始位置,从而让磁头进行更少磁盘io操作

mysql中的所用数据结构 B+TREE (硬盘中数据的结构)

Mycat个人心得笔记(一)_第1张图片

三阶的b+tree最多帮助查找27条数据,随着数据越来越多,数据库会把b+tree变得越来越高,越来越宽

阶数+1次io   能使用id做索引,能不是使用string类型的user_id,user_name做索引  保证排序

单机数据库无论从设计,从索引的优化,都会最终瓶颈卡在硬件读写速度上现代磁盘150M/S;

单机无法解决海量高并发的数据,最快固态硬盘在传输速度3500M/s左右

三.数据库集群

一.数据库的集群结构:

 

Mycat个人心得笔记(一)_第2张图片

数据库的主从复制技术是高可用分布式集群的基础

 

二.mysql数据库的主从复制

            mysql数据支持一主多从,多级主从;搭建主从结构之前了解主从复制原理

 

三.mysql的主从复制原理

    一主一从为结构,了解复制的原理

Mycat个人心得笔记(一)_第3张图片

搭建主从mysql结构时

  • 主节点:开启一个二进制日志文件(mysql默认不开二进制)
  • 从节点:开启io线程,读取主节点二进制文件
  •       开启中继日志,保存io读取的数据
  •       开启sql线程,跟新本地数据

                  下篇博客写如何搭建数据库集群 多台数据库安装

                                                             https://blog.csdn.net/LiuY521/article/details/90749424

你可能感兴趣的:(Mycat,Mycat)