笔记

本片文章用于记录日常看到比较好的文章以及个人的一些笔记

Golang

GMP

深入解析 Go 中 Slice 底层实现

GC

grpc 入门

go goroutine详解

go GC源码详解

非常棒的关于go指针的文章

kratos微服务框架

工程骨架说明

设计理念

fasthttp包

比较好的中文文档说明

Mysql

MVCC多版本并发控制 mvcc讲解

PHP

nginx与php的交互过程

数据结构

跳表

分析死锁

其他

Protobuf3 语法指南

Nginx epoll模型

笔记

mysql

innodb和b+树

1、父节点的元素会出现在子节点中

2、父节点存储了每个子节点的最大元素,可得出根节点的最大值为整棵树所有元素的最大值

3、叶子节点都在同一层,且叶子节点上包含了整棵树的所有元素,且存储了下个叶子节点的指针,是个有序链表

4、在b+树中,只有聚集索引的叶子节点上,才是真正的数据。非聚集索引的叶子节点上,存储的是指向聚集索引叶子节点上的指针。

5、B+树每一层的数量可以通过设置页的大小来决定,innodb_page_size,默认16k为一页 聚集索引的叶子节点是对应的行数据。每一页至少会存储两条数据,若数据太大,会把数据的前部分存到数据页中,剩下的数据,会存到后面的数据页中,并把后面的页地址存到叶子节点对应的页中

	innodb的页最大填充因子是15/16,默认页大小为16k,超过后,会重新分配一个页

注意:mysql中的InnoDB引擎中,主键索引为聚集索引,二级索引并非非聚集索引(聚簇索引就是聚集索引,名字不同而已。MyISAM引擎中,主键和二级索引都为非聚集索引)

5、相比较b树,优点如下:

    (1):节点中未包含卫星数据,因此,同一个磁盘块中可以存储更多的索引数量,减少IO次数。
    (2):在进行范围查找时,由于数据都在叶子节点上,且是有序的,所以性能更好。
    (3):在进行查找时b树为查到数据就停止了,而b+树是每次查找都会查到叶子节点才结束,因此b+树在进行查找时比较稳定(难道不应该是b树相对来说比它的性能快吗)

6、没有主键时,先找第一个不为空null的唯一索引当作主键,如果没有,就生成一个隐藏的主键 二级索引存储主键的值,而不是值的指针

	优点是:减少了当出现行移动或行分裂时,对二级索引的维护工作
	缺点是:当主键的值占用空间很大时,也会导致二级索引占用的空间变大

mysql锁

ddl:对表结构操作 dml:对表数据操作。增删改查都属于dml innodb支持行级锁,myisam不支持行级锁

表级锁

写是排他锁,写锁意味着本线程可以读写,其他线程不能读也不能写。读锁是共享锁,加上后本线程不能写,其他线程只能读不能写。

行级锁:

在 InnoDB 事务中,行锁是在需要的时候才加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放。这个就是两阶段锁协议。

mdl锁(matedata lock)

在对表进行增删改查数据时,会自动加上mdl的读锁,是为了防止当前线程在对表进行增删改查数据时,另一个线程对表结构进行修改,导致当前线程的结果跟表结构对不上。 在修改表结构时,会自动加上mdl的写锁,其他线程不能对表做任何操作,包括对表数据的读写也不行。

当出现死锁以后,有两种策略: 一种策略是,直接进入等待,直到超时。这个超时时间可以通过参数 innodb_lock_wait_timeout 来设置。 另一种策略是,发起死锁检测,发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数 innodb_deadlock_detect 设置为 on,表示开启这个逻辑。 前者默认超时时间是50秒,如果设置太长影响业务,如果设置太短,会造成误伤,所以一般都是用后者这个策略

行锁锁的是索引,假如where条件中没有索引的话,那么就会在主键索引中挨个查询数据,进行上锁,将会把整张表锁起来,,如果where后面加上limit 1的话,锁的将是从第一行开始到第一条符合条件的行

go中的指针

在go编程中要谨慎使用指针进行返回参数,原因:一般如果某个变量是指针类型,它会先被分配到当前goroutine的当前func栈上,但如果这个变量被返回了,在其他变量中也用到了这个变量,编译器会把它从栈上copy出来放到堆上,因为这个变量并没有随着func的结束,而消失。在堆上进行内存分配的开销是很大的。gc的回收周期是随着堆的使用比例进行增长的,这会让cpu在gc上耗费更多的性能和时间。但指针并不是一无是处,假如变量的内容占用内存非常大,更应该使用指针进行返回参数,这需要对当前代码进行基准测试,用来抉择。没必要进行过早的优化去都用指针

王兴振博客
请先登录后发表评论
  • latest comments
  • 总共0条评论