摘要:
MySQL 基础架构 这道题应该从 MySQL 架构来理解,我们可以把 MySQL 拆解成几个零件,如下图所示 大致上来说,MySQL 可以分为 Server层和 存储引擎层。 Server 层包括连接器、查询缓存、分析器、优化器、执行器,包括大多数 MySQL 中的核心功能,所有跨存储引擎的功能也 阅读全文
摘要:
关于索引:由于索引需要额外的维护成本,因为索引文件是单独存在的文件,所以当我们对数据的增加,修改,删除,都会产生额外的对索引文件的操作,这些操作需要消耗额外的IO,会降低增/改/删的执行效率。所以,在我们删除数据库百万级别数据的时候,查询MySQL官方手册得知删除数据的速度和创建的索引数量是成正比的 阅读全文
摘要:
在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式。 MyISAM索引实现 MyISAM引擎使用B+Tree作为索引结构。 MyISAM会按照数据插入的顺序分配行号,从0开始,然后按照数据插入的顺序存储在 阅读全文
摘要:
今天就给大家聊一个有意思的话题:每秒上千订单场景下,如何对分布式锁的并发能力进行优化? 背景引入 首先,我们一起来看看这个问题的背景? 前段时间有个朋友在外面面试,然后有一天找我聊说:有一个国内不错的电商公司,面试官给他出了一个场景题: 假如下单时,用分布式锁来防止库存超卖,但是是每秒上千订单的高并 阅读全文
摘要:
Mysql innoDB日志 Mysql innoDB有两个日志模块:redolog 和 binlog 咱们先看一下redolog。 redolog中文来讲就是重做日志,它有什么用呢?如果每次你的更新或者插入都写入磁盘的话那这个IO成本就比较大了,所以InnoDB就把记录先记录在redolog中,并 阅读全文
摘要:
事前准备 为了故事的顺利发展,我们需要创建一个表: CREATE TABLE t ( id INT PRIMARY KEY, c VARCHAR(100) ) Engine=InnoDB CHARSET=utf8; 然后向这个表里插入一条数据: INSERT INTO t VALUES(1, '刘备 阅读全文
摘要:
前言 在分布式系统中,缓存和数据库同时存在时,如果有写操作的时候,先操作数据库还是先操作缓存呢? 先思考一下,可能会存在哪些问题,再往下看。下面我分几种方案阐述。 缓存维护方案一 假设有一写(线程A)一读(线程B)操作,先操作缓存,在操作数据库,如下流程图所示 1)线程A发起一个写操作,第一步del 阅读全文