MySQL 主从同步三种模式:异步复制、半同步复制、全同步复制 异步复制 异步复制异步复制是 MySQL 默认的同步方式。 在 master 为 slave 开通账号密码、IP授权之后,slave 可以从 master 进行数据同步,主要依赖的是 master 的 binlog 日志。 slave 会启动两个线程,IO Thread 和 SQL Thread。IO Thread 负责从 master 拉取 binlog 日志,并写入 relay 中继日志。SQL Thr 2020-08-08 MySQL #MySQL
MySQL 主从复制 https://dev.mysql.com/doc/refman/8.0/en/replication.html 主从复制的原理和步骤简单的说: master 将数据库的改变写入二进制日志(binlog),slave 同步这些二进制日志并重新执行一遍,这样 slave 上的数据就和 master 上的数据相同了。 详细的说: master 启用二进制日志(binlog),记录任何修改数据 2020-08-08 MySQL #MySQL
MySQL 事务 官网保平安:https://www.mysql.com/MySQL 思维导图:https://www.processon.com/view/link/63bc2c8ea82ed9463ba99f38 MySQL 支持事务吗在缺省模式下,MySQL 是 autocommit 模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,MySQL 是不支持事务的。 如果你的 MySQL 表类型是 2020-08-08 MySQL #MySQL
MySQL 事务 和 锁、MVCC 的关系 官网保平安:https://www.mysql.com/MySQL 思维导图:https://www.processon.com/view/link/63bc2c8ea82ed9463ba99f38 事务共有四个级别 未提交读(Read Uncommitted, RU):允许脏读,其他事务只要修改了数据,即使未提交,本事务也能看到修改后的数据值。也就是可能读取到其他会话中未提交事务修改的数据 2020-08-08 MySQL #MySQL
MySQL 日志之 redo log 总结先来看一下 MySQL 事务更新数据执行流程。 当我们想要修改DB上某一行数据的时候,InnoDB 先判断数据页是否在内存中。 若为否,则从磁盘读取数据到内存中,返回数据行。 若是数据页在内存中,则直接返回数据行。 执行数据更新操作,然后把数据写入内存,同时把 redo log 写入到内存。 执行 commit 操作(此 commit 是 SQL 命令操作,而不是数据的 commit 状 2020-08-08 MySQL #MySQL
MySQL 索引 备注:我们往 MySQL 插入的数据最终都是存在页中的。在 InnoDB 的设计中,页与页之间是通过一个双向链表连接起来。 1、为什么需要索引一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到 索引 了。 如果没有索引,我们在查 2020-08-08 MySQL #MySQL
MySQL 索引下推 索引下推索引下推(Index Condition Pushdown,简称 ICP) 是 MySQL 5.6 提供的一项索引优化功能,它允许存储引擎在索引遍历过程中,执行部分 WHERE 字句的判断条件,直接过滤掉不满足条件的记录,从而减少需要从存储引擎中检索的数据行数,提高查询效率。 下面以 Innodb 数据库为例:假设我们有一个名为 user 的表,其中包含 id, username, zip 2020-08-08 MySQL #MySQL
MySQL 索引为什么使用B+Tree 0、先验知识二分查找法二分查找法也叫作折半查找法,它是在有序数组中查找指定数据的搜索算法。它的优点是等值查询、范围查询性能优秀,缺点是更新数据、新增数据、删除数据维护成本高。 首先定位left和right两个指针。 计算(left+right)/2。 判断除2后索引位置值与目标值的大小比对。 索引位置值大于目标值就-1,right移动;如果小于目标值就+1,left移动。 1、背景My 2020-08-08 MySQL #MySQL
MySQL 锁 官网保平安:https://www.mysql.com/MySQL 思维导图:https://www.processon.com/view/link/63bc2c8ea82ed9463ba99f38 MySQL 中锁的种类 ★★★按锁粒度从大到小分类:表锁、页锁和行锁 以及特殊场景下使用的 全局锁 表锁:表级别的锁定是 MySQL 各存储引擎中最大颗粒度的锁定机制。该锁定机制最大的特点是实现 2020-08-08 MySQL #MySQL
MySQL 隐式转换 背景平时在使用 MySQL 的时候发现即使字段类型是 int,但是拿字符串去查询也能查到。那这是为什么呢?背后自然是 MySQL 帮我们自动转换了。 WHERE 条件语句里,字段属性和赋给的条件,当数据类型不一样,这时候是没法直接比较的,需要进行一致转换。 隐式转换规则官方文档中关于隐式转化的规则是如下描述的: 两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用 < 2020-08-08 MySQL #MySQL
MySQL 页 页是什么首先,我们需要知道,页(Pages)是 InnoDB 中管理数据的最小单元。 Buffer Pool 中存的就是一页一页的数据。再比如,当我们要查询的数据不在 Buffer Pool 中时,InnoDB 会将记录所在的页整个加载到 Buffer Pool 中去;同样的,将 Buffer Pool 中的脏页刷入磁盘时,也是按照页为单位刷入磁盘的。 页的概览我们往 MySQL 插入的数据最终都 2020-08-08 MySQL #MySQL
MySQL 预编译 1、什么是MySQL的预编译?我们发送一条 SQL 语句给 MySQL 服务器时,MySQL 服务器每次都会对这条 SQL 语句进行校验、解析等操作。 有很多情况,一条 SQL 语句可能需要反复的执行,而 SQL 语句也只可能传递的参数不一样,这样的 SQL 语句如果每次都进行校验、解析等操作,有些太过于浪费性能了,因此提出了 SQL 语句的预编译。 所谓预编译就是将一些灵活的参数值以占位符 ? 2020-08-08 MySQL #MySQL
SQL 语句执行过程 本篇文章会分析下一个 SQL 语句在 MySQL 中的执行流程,包括 SQL 的查询在 MySQL 内部会怎么流转,SQL 语句的更新是怎么完成的。 在分析之前我会先带着你看看 MySQL 的基础架构,知道了 MySQL 由那些组件组成以及这些组件的作用是什么,可以帮助我们理解和解决这些问题。 1、MySQL 基础架构分析1.1 MySQL 基本架构概览下图是 MySQL 的一个简要架构图,从下图 2020-08-08 MySQL #MySQL
bitmap 简介位图(Bitmap),即位(Bit)的集合,是一种数据结构,可用于记录大量的 0-1 状态,在很多地方都会用到,比如 Linux 内核(如inode,磁盘块)、Bloom Filter算法等,其优势是可以在一个非常高的空间利用率下保存大量0-1状态。 BitMap 的原理 Bitmap 就是用一个bit位来标记某个元素对应的 Value, 而 Ke y即是该元素。由于采用了 Bit 为单位来存 2020-08-08 算法 #算法
information_schema 信息数据库 一、information_schema 简介在 MySQL 中,把 information_schema 看作是一个数据库,确切说是信息数据库。其中保存着关于 MySQL 服务器所维护的所有其他数据库的信息。如数据库名,数据库的表,表栏的数据类型与访问权限等。 在 information_schema 中,有很多只读表,它们实际上是视图,而不是基本表,因此,你将无法看到与之相关的任何文件。 12 2020-08-08 MySQL #MySQL
布隆过滤器 布隆过滤器相信大家没用过的话,也已经听过了。 布隆过滤器主要是为了解决海量数据的存在性问题。对于海量数据中判定某个数据是否存在且容忍轻微误差这一场景(比如缓存穿透、海量数据去重)来说,非常适合。 文章内容概览: 什么是布隆过滤器? 布隆过滤器的原理介绍。 布隆过滤器使用场景。 通过 Java 编程手动实现布隆过滤器。 利用 Google 开源的 Guava 中自带的布隆过滤器。 Redis 中的 2020-08-08 数据结构 #数据结构
布隆过滤器 Java 实现 介绍使用 Java 实现布隆过滤器有两种方式,一种是自己实现,另一种是使用 Google 开源的 Guava 中自带的布隆过滤器 自己实现版本一:简单模拟实现1234567891011121314151617181920212223242526272829303132333435363738public static class BloomFilter { private byte 2020-08-08 算法 #算法
布隆过滤器 Python 实现 python实现通过python实现可以有两种方式: 布隆过滤器直接用内存存储; 布隆过滤器用redis存储。用redis实现可以支持并发,多进程过滤。 我们先创建一个布隆过滤器的基类: 123456789101112131415161718192021222324252627282930313233343536373839404142import mathclass BloomFilter( 2020-08-08 算法 #算法
布隆过滤器简介 背景在开发以及数据处理过程中,我们经常要判断一个元素是否在一个集合中,或者对一批元素去重,最直接的办法是是将所有元素存在计算机中,遇到新的元素时,将它和集合中的元素比较即可,当集合小时这样做快速准确,但当集合规模巨大时,因为要耗费存储空间,其存储效率低的问题的就显现出来。 比如:5TB的硬盘上放满了数据,请写一个算法将这些数据进行排重。如果这些数据是一些32bit大小的数据该如何解决?如果是64b 2020-08-08 算法 #算法
数据结构基础 what’s the 数据结构数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 简单来说,数据结构就是设计数据以何种方式组织并存储在计算机中。比如:列表、集合与字典等都是一种数据结构。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。 数据结构按照其逻辑结构可分为线性结构、树结构、图结构: 线性结 2020-08-08 数据结构 #数据结构