ConcurrentHashMap 简要分析
ConcurrentHashMap 简要分析 JDK1.7和1.8,不同之处? 1. JDK1.7 在JDK1.7中ConcurrentHashMap底层结构为Segment数组。 而Segment继承自ReentrantLock,因此Segment是一个可重入的锁,我们对Segment的线程安全操作就是通过Segment(ReentrantLock)的lock方法来保证的,同时我们也就可...
ConcurrentHashMap 简要分析 JDK1.7和1.8,不同之处? 1. JDK1.7 在JDK1.7中ConcurrentHashMap底层结构为Segment数组。 而Segment继承自ReentrantLock,因此Segment是一个可重入的锁,我们对Segment的线程安全操作就是通过Segment(ReentrantLock)的lock方法来保证的,同时我们也就可...
普通索引和唯一索引 主键索引:特殊的唯一索引,不允许有空值 唯一索引:与 "普通索引"类似,但是索引列的值必须唯一,但是允许为空 查找过程的区别 普通索引和唯一索引在查找时有区别: 普通索引在找到匹配的值之后,还会继续往下寻找 唯一索引在找到匹配的之后,就不会再往下寻找了 但是这带来的区别通常来说特别小,因为InnoDB的数据都是按照页为单位读取的,当需要一条记录时,会把这个记录...
一致性读与当前读 开启一个事务,可以通过begin或start transaction命令开启,但是这两个命令并不是一个事务的起点,事务真正开启是在执行第一个操作InnoDB表的语句之后,才是真正启动。这样可以最大程度上支持事务并发,让锁持有的时间尽量短。 如果想要立马启动一个事务,那么可以通过start transaction with consistent snapshot命令去开启事务...
了解MySQL的锁 MySQL中可以把锁大致分成全局锁,表锁以及行锁三类。 全局锁 全局锁会锁住整个数据库实例。可以通过下面命令(FTWRL)给数据库加全局读锁: Flush tables with read lock; 解锁通过 unlock tables; 使用此命令后,数据更新、数据定义语句以及更新类事务的提交语句会被阻塞住。全局锁的典型场所是做全库的逻辑备份(备份过程中整个库处于...
索引 索引的出现就是为了提高数据查询的效率,如书的目录 常见索引结构 索引通常有几种常用的数据结构 key-val结构(hash) 优点:查询速度快 缺点:范围查询效率低 适合等值查询。 有序数组 如下,将数据根据id递增的顺序,直接存放在数组里面,通过二分就可以进行快速的查询,但是插入时效率较低,需要将所有的数据往后移动,因此适合静态存储。 树 二叉搜索树 父节点左边的值小于父...
MySQL-03 了解MySQL事务 事务就是保证一组数据库操作,要么全部成功,要么全部失败。 MySQL中,事务支持实在引擎层中实现的,不是所有的引擎都支持事务,如MyISAM引擎就不支持,而取代它的InnoDB则支持事务特性。 事务的隔离性与隔离级别 隔离性也就是我们常说的ACID中的I(Isolation) 多个事务同时进行时,可能出现脏读,不可重复读,幻读的问题,为了解决这些问题...
通过更新语句了解redo log和binlog 之前已经了解过了一条查询语句的执行过程,更新语句与查询语句流程类似,如果一个表有更新,在通过查询缓存时这条语句会将对应表上的所有缓存结果清空。 之后分析器通过词法分析和语法分析了解到这是一条更新语句,优化器决定索引,执行器负责执行,找到具体行然后更新。 最重要的不同在于,更新的过程中还涉及到了两个日志模块,redo log 和 binlog。 ...
MySQL - 01 一条SQL查询语句如何执行的? MySQL的基础架构 MySQL可以大致分为Server层和存储引擎两部分,不同的存储引擎共用一个Server层 Server层 Server层涵盖了MySQL的大多数核心服务功能,如内置函数(日期,数学和加密),跨存储引擎功能(存储过程,触发器,试图等)等 包括: 连接器 查询缓存 分析器 优化器 执行器 连接器 连接器负责与客户端...