分布式唯一ID 一 什么是分布式唯一ID,有些什么需求在分布式系统中,要求某些ID不能重复,必须唯一。他需要满足以下特点:第一:全局唯一,不能重复第二:递增性:下一个ID一定比上一个大第三:安全性:不得暴露与业务相关的信息,防止用户恶意获取二 有哪些分布式唯一主键生成方案,各自优缺点2.1 UUID优点:简单缺点:第一,16字节大小,存储成本高,影响写入速度;第二,最关键是的做主键非常不合适,在因为不是趋势递增,那么在主键索引中就不是连续的,那么插入数据的时候就是离散的存储,导致页分裂.
MySQL深度剖析之索引专题(2021) 9.1 为什么需要使用索引第一:减少了MySQL需要扫描的数据量,尤其是全表扫描第二:随机IO变成顺序IO,提升查询速度可以快速匹配where子句、排序和分组也可以使用索引,匹配原则最左匹配、特定索引列的min和max计算、9.2 MySQL 使用了哪些索引MySQL 提供了BTree和Hash索引,一般使用的是BTree索引,Hash索引很少使用或者几乎不使用9.3 MySQL使用的BTree索引是基于什么数据结构的,为什么不使用B-Tree而是B+Tree呢?这两者有何相
MySQL深度剖析之事务隔离级别和锁机制(2021) 一 事务隔离级别和锁机制1.1 多个事务并发修改同一条数据或者对同一条数据并发读写存在哪些事务并发问题1.1.1 脏读(未提交读)A事务读取了别的事务还未提交的更新,而B事务是有可能回滚的。1.1.2 虚读(不可重复读)A事务读取了别的事务提交的更新,导致A事务范围内多次查询,返回的结果不一样。一般不是什么大问题,取决于你的业务是否允许在同一个事务内每次查询结果不一样,如果允许,就没啥事,如果不允许则就有问题了。1.1.3 幻读A事务读取了别的事务新增的数据,导致事务内每次查询结
MySQL深度剖析之数据在磁盘上存储(2021) 一 数据在磁盘上存储格式(row format)表中的数据在磁盘上存储是有格式的,可以在创建表的时候通过row_format指定,比如MySQL5.0之前的reduntant,MySQL5.0 之后的compact和dynamic,两个差不多,区别在于页面溢出处理上,还有compressed,在dynamic基础上使用了压缩算法,MySQL5.7 默认就是dynamic,我们这里以compact举例子,它格式如图所示:二 变长字段长度列表MySQL表中有些字段长度不固定,是动态的,.
MySQL深度剖析之Buffer Pool专题(2021) 一 Buffer Pool专题1.1 为什么需要Buffer Pool如果我们每一次查询或者更新都需要到磁盘找到对应数据页,每次的都需要从磁盘加载,那么性能必定是很差的。所以将一些从磁盘加载的数据页,放入到内存缓存起来,而不用每次都从磁盘加载,提升性能。1.2 Buffer Pool数据结构#1 数据库在启动的时候,根据Buffer Pool大小在申请一块内存区域,叫做Buffer Pool,默认大小128MB,可以通过innoddb_buffer_pool_size控制。#2 每一
MySQL深度剖析之undo log & redo log & binlog专题(2021) 因为每次对磁盘随机读写影响性能,尤其是高并发的时候,所以引入了Buffer Pool, 即只要更新Buffer Pool中的记录,则算更新成功,那如果更新完了还没有flush到磁盘则宕机了,此时内存的这些修改后的记录就会丢失。所以引入了redo log,在写入内存的时候,同样写入到redo log。如果在事务期间,需要执行多条SQL,如果更新某一条SQL失败,需要回滚,这时候前面的已经写入到内存了,怎么回滚呢? 所以引入了undo log, 在写入内存之前,记录修改数据之前的记录。一 r
MySQL深度剖析之SQL语句更新流程(2021) #1 线程开始执行SQL更新请求之前,会创建事务,并且为当前线程分配一块内存空间叫做binlog cache注意:binlog cache 是每一个线程分配一个;binlog cache大小受binlog_cache_size控制;如果binlog cache达到binlog_cache_size则将binlog cache内容移到一个临时文件中保存,但是这个文件不能超过max_binlog_cache_size,如果超过则报错;客户端断开连接,binlog cache释放#2 SQL...
MySQL深度剖析之MySQL架构(2021) 一 为什么需要数据库连接池每一个线程都需要通过JDBC驱动去和数据库建立网络连接,然后执行SQL,SQL执行完毕,线程销毁,如果并发量很大的时候,就需要不同的建立网络连接,然后销毁连接,并且建立网络连接也是需要耗时的,所以效率低下。所以使用数据库连接池,可以循环利用数据库连接。二 数据库MySQL的架构MySQL服务器架构主要分为三层:应用层、逻辑层和物理层。应用层:主要负责和客户端进行交互,建立连接,响应请求逻辑层:主要负责SQL查询、事务管理、恢复等物理层:主要负责写日志
MySQL裸机性能测试(2021) 一 为什么要对新申请的MySQL服务器压测新申请的机器我们是不知道性能的,系统上线之前,我们需要知道数据库的性能,从而在系统部署之后的压测中,判断系统的性能是高于还是低于数据库性能,从而确定瓶颈或者性能问题是在系统还是在数据库。比如数据库的QPS是2000,可能应用系统的QPS才500.二 数据库压测性能指标有哪些2.1 IOPS: 随机IO并发处理能力,比如200IOPS2.2 吞吐量: 磁盘每一秒中可以读写多少字节数据量, 比如redo log受吞吐量影响2.3 延迟:往磁盘写一
网络协议:网络基础 什么是计算机网络?将各个分散的、具有独立功能的计算机系统,通过网络设备(路由器)和线路(光纤)连接起来,然后通过软件实现资源共享和信息传递的系统。一 网络指标1.1 速率速率: 指的是每一秒发送端和接收端传输的比特数量(即8位,二进制表示,1代表高电压,0代表低电压)。或者说每一秒两段之间传输的数据量。常见的单位b/s kb/s, Mb/s Gb/s等1.2 带宽带宽: 表示网络通信线路传输数据的能力,即最高速率。比如100.0 Mbs (百兆带宽)1000.0 Mbs(千兆带宽
网络协议:UDP 一 UDP协议及其特点1.1 什么是UDP协议UDP: User Datagram Protocol, 用户数据报协议,它是一种无连接,不可靠的传输,面向报文的一种协议。在IP协议的基础上提供了简答的功能,比如:复用分用和差错检测功能1.2 UDP协议特点#1 无连接: 和IP协议一样,发送数据报之前不需要建立连接,减少了网络开销和延时,节省了系统资源#2 不可靠: 和IP协议一样,只保证尽最大努力交付,所以不保证可靠交付。因此不需要维护一些复杂的连接状态信息,适合可以接受数据丢失的
网络协议:TCP拥塞控制 一 什么是网络拥塞和拥塞发生的原因分析当网络中传输的分组数目较多的时候,超过了网络负载,造成网络经常丢包,从而导致传输性能下降的一种现象。如图示:二 拥塞控制方法2.1 慢开始算法 和 拥塞避免算法慢开始算法的核心思想:就是先发送一个较小的报文段,然后后续发送的报文段主键以指数倍数形式增长。但是我们知道这样以指数倍数形式增长会有一个问题,就是可能某一时候需要发送大量的报文段,最后导致网络拥塞,报文段丢失。所以提出来拥塞避免算法。对于慢开始算法,我们设置一个阀值
网络协议:TCP流量控制 一 什么是流量控制就是在接收端拥堵的时候,发送端应减少报文段的发送;在接收端不拥堵的时候,可以恢复到正常的报文段的发送。是通过滑动窗口实现的,通过窗口来控制流量。二 如何进行流量控制的#1 发送端向接收端发送连接请求,接收端对请求进行确认,确认包里会告诉发送端它的接受窗口window是多大(能连续接收多少个字节),发送端后面就会根据这个window设置发送端自己的发送窗口大小#2 当接收窗口来不及处理发送端报文段的时候,则会调整(缩小)window窗口,接收端此时根据接收端确认包里的
网络协议:TCP可靠传输 我们都知道TCP协议是一个传输可靠的协议,那么它是怎么实现传输可靠的呢?它是由改进的停止等待协议和滑动窗口来保证传输可靠的。一 停止等待协议#1 发送端发送一个消息到接收端,就必须等待接收端确认,发送端才会发送下一个消息#2 如果在指定的超时时间内,接收端没有确认,原因可能是数据段还没有到达接收端就丢了,则发送端会重新发送#3如果在指定的超时时间内,接收端确认了,但是接收端的确认包丢了,则发送端也会重新发送,但是这次发送过来之后,接收端因为之前已经确认过,就会把之前的确认的数据丢弃#
网络协议:TCP连接管理 一 连接和断开连接过程中的一些状态术语CLOSED: 表示初始状态LISTEN: 服务器某个SOCKET处于监听状态SYN_SENT: 当客户端socket执行connect的时候,它首先会发送SYN报文,这个时候客户端就进入了SYN_SENT状态,并等待服务器的确认SYN_REVD:这个状态表示服务器端接受到了SYN报文,等待客户端的的确认ESTABLISHED: 表示连接已经建立了FIN_WAIT_1: 表示主动关闭连接方发起关闭连接的FIN报文后,进入这个状态,等到对方的确认
网络协议:TCP滑动窗口 一 什么是窗口以及窗口作用1.1 什么是窗口在TCP协议里,窗口是面向字节流的,一个窗口表示一定长度的字节数据, 窗口就可以用来收发一组连续的数据。TCP连接的两端都是可以收发数据的,收发两端都维护的有一个窗口结构。1.2 窗口作用#1 和停止等待协议使用,提升通信效率#2 可以控制数据传输速率和流量二 发送端和接收端窗口结构2.1 发送端窗口在发送缓冲区中,缓冲区分为4个部分:提供窗口: 指的是已发送但是未确认+即将发送的窗口。这个窗口需要接收端确认之后才能确定
网络协议:超时与重传机制 一 TCP 为什么需要重传因为网络层有可能出现数据包丢失,数据包重复或者无序的情况。为了保证数据传输正确,不重复和有序,所以TCP才提供可靠的数据传输服务。为了保证数据传输的正确性,所以TCP重传它认为已经丢失的包。TCP如何确认呢?TCP根据接收端返回至发送端的一系列确认信息来判断是否出现丢包。当数据段或确认信息信息丢失,则TCP触发重传操作。二 重传机制TCP拥有两套独立机制来完成重传,一是基于时间,而是基于确认信息的构成。2.1 基于计时器的重传一旦TCP发送端获取到了
网络协议:TCP保活机制和Nagle算法 一 Nagle算法背景有时候,我们可能会遇到一些很小的分组,比如,20字节的IP首部,20字节的TCP首部和1字节的数据,如果很多这样的小分组数据,在局域网一般不会出现拥塞,但是在广域网就可有可能。所以Nagle算法就是为了解决这样的小分组问题二 Nagle算法详解#1 TCP连接上最多只能有一个未被确认的小分组,该分组的确认到达之前不能发送其他的小分组#2 发送端需要收集这些小分组,然后在未被确认的小分组确认的时候,就可以将收集的这些小分组组成一个报文段发送出去#3 但是如果长时间
网络协议:TCP 一 TCP 和 UDP 比较二 TCP协议特点#1 TCP协议是面向连接的传输层协议,即在应用程序在使用TCP协议之前,必须先建立TCP连接,数据传输完毕后还需要释放连接。#2 每一个TCP连接只能由两个端点,每一个TCP连接只能进行一对一传输#3 TCP协议提供数据可靠性,即数据无差错,不丢失,不重复,且按顺序发送(可靠有序、不丢不重)#4 TCP协议是全双工通信。TCP允许通信双方在应用进程任何时候都能发送数据。TCP连接的两端都设有接收缓存和发送缓存,用来临时存放双向通信数
网络协议:IP 一 IP协议的主要功能#1 寻址和路由#2 传递服务#3 数据报分片和重组二 IP协议的特点2.1无连接在发送数据包之前,不会和对方建立会话。即不关心对方时候可以接收到这个数据。2.2不可靠指的是IP协议不能保证IP数据可以准确达到接收端,他只承诺尽最大努力交付。一旦检测到数据发送失败,就会通知上层协议,不是自己尝试重传。三 IP协议数据报格式发送格式:IP数据报的格式主要分为两部分:一部分叫做首部;一部分叫做数据。3.1 版本(v