JUC集合 ConcurrentHashMap详解

JUC集合: ConcurrentHashMap详解

JDK1.7之前的ConcurrentHashMap使用分段锁机制实现,JDK1.8则使用数组+链表+红黑树数据结构和CAS原子操作实现ConcurrentHashMap;本文将分别介绍这两种方式的实现方案及其区别。@pdai

阅读更多

MySQL十九:分库分表实践

在很多小型应用中都没真正使用分库分表,但是说起来并不陌生,因为我们在面试中经常会被问到,今天我们从从以下几个方面来聊聊分库分表:「是什么?解决什么?怎么做?为什么要这么做?即:」

  • 分库分表是什么?
  • 分库分表解决什么问题?
  • 分库分表怎么做?
  • 分库分表什么时候做?
  • 分库分表引发的问题是什么?
  • 分库分表中间件有哪些?
阅读更多

MySQL十八:写语句的执行过程

当我们需要修改一个记录时,数据库会先根据条件找到要修改的数据,然后执行修改写入操作,因此我们再分析写操作的执行过程时,其实是包含读语句的执行过程的。

一、读语句的执行过程

阅读更多

MySQL十六:36张图理解Buffer Pool

  • 在应用系统中,我们为加速数据访问,会把高频的数据放在「缓存」(Redis、MongoDB)里,减轻数据库的压力。
  • 在操作系统中,为了减少磁盘IO,引入了「缓冲池」(buffer pool)机制。
  • MySQL作为一个存储系统,为提高性能,减少磁盘IO,同样具有「缓冲池」(buffer pool)机制。
阅读更多

MySQL十四:单表最大2000W行数据

在互联网技术圈中有一个说法:「MySQL 单表数据量大于 2000 W行,性能会明显下降」。网传这个说法最早由百度传出,真假不得而知。但是却成为了行业内一个默认的标准。

单表超过2000W行数据一定会导致性能下降吗?我认为是不一定的,虽然说建议单表不超过2000W,但是我不接受它的建议可不可以?那必然也是可以的。

一、单表最大到底能存多少数据

先来看看下面这张图,了解一下mysql各个类型的大小

阅读更多

MySQL(十三):小一万字+14张图读懂锁机制

MySQL中的锁有很多种,各种锁应用在不同的地方。「MySQL依靠锁机制可以让多个事务更新一行数据的时候串行化」

MySQL中锁总的来说有两种概念:Lock和Latch

  • Latch

    称为闩锁(轻量级的锁),因为Latch要求锁定的时间非常短。其目的是用来保证并发线程操作临界资源的正确性,并且通常没有死锁检测的机制。在InnoDB引擎中,Latch又分为mutex(互斥量)和rwlock(读写锁)。

  • Lock

    「Lock的对象是事务,用来锁定的是数据库中的对象,如表、页、行」。并且一般lock的对象仅在事务commit或rollback后进行释放(不同事务隔离级别释放的时间可能不同)。

阅读更多

MySQL(十二):索引分析

数据库优化是一个很常见的面试题,下面就针对这一问题详细聊聊如何进行索引与sql的分析与优化。

一、执行计划(EXPLAIN)

MySQL 提供了一个 EXPLAIN 命令,它「可以对 sql语句进行分析,并输出sql执行的详细信息」,可以让我们有针对性的优化。例如:

阅读更多

MySQL十:索引基础知识回顾

1、索引简介

1.1 什么是索引

索引是对数据库表中一列或多列的值进行排序的一种结构,可以大大提高MySQL的检索速度。索引在MySQL中也叫做key,当表中的数据量越来越大时,索引对于查询性能的影响非常大。

阅读更多