CloudNativeEra
  • Introduction
  • 名词解释
  • Computer Science
    • Computer Organization
      • CPU
      • 二进制、电路、加法器、乘法器
      • 编译、链接、装载
      • 存储器
      • IO
    • Operating System
      • 操作系统基础知识
      • 系统初始化
      • 进程管理
      • Everything about Memory
      • 文件系统
      • 并行编程
      • Linux
        • CPU
        • IO 多路复用
        • DMA IO and Linux Zero Copy
    • Computer Network
      • 网络相关命令
      • 评估系统的网络性能
      • 网络抓包
      • Linux 最多支撑的 TCP 连接
      • 网络虚拟化
      • DHCP 工作原理
    • Data Structure and Algorithm
      • 题目列表
      • Summarize
        • 方法总结
        • 二分思想
        • 树的演化
        • 算法思想总结
      • Data Structure
        • Data Struct - Array
        • Tree
        • Heap
        • Hash
        • 字符串
      • Algorithm
        • Sorting Algorithm
        • 查找
        • 贪心算法
        • 动态规划
        • 位运算
      • Practice Topics
        • Data Struct in SDK
        • Topic - Tree
        • Topic - Graph
        • Topic - 滑动窗口
        • 剑指 Offer 题解
    • 并发编程
      • 并发模式
      • 并发模型
  • 系统设计
    • 软件设计
      • 软件架构
      • 编程范式
      • 系统设计题
      • 设计原则
      • 计算机程序的构造和解释 SICP
    • 领域驱动设计
      • 应用:在线请假考勤管理
      • 应用: library
    • 微服务与云原生
      • Designing and deploying microservices
      • 容器技术
      • Docker
      • Etcd
      • Kubernetes
        • Kubernetes - Mapping External Services
      • Istio
      • 监控
    • 分布式系统
      • 分布式理论
      • 分布式事务
    • 后端存储设计
      • 缓存设计
      • 数据库架构设计
    • CI/CD
    • 设计最佳实践
    • 测试
    • 安全
    • 综合
      • 开发实践
      • 分布式锁
      • 分布式计数服务
      • 弹幕系统设计
      • 消息队列设计
      • 分布式ID生成算法
      • 限流设计
      • 网关设计
      • 通用的幂等设计
      • 分布式任务调度
        • Timer
        • ScheduledExecutorService
        • Spring Task
        • Quartz
      • 交易系统
      • 权限设计
  • 编程语言
    • 编程语言
    • C & C++
    • Java
      • JVM
        • JVM Bytecode
      • Java 核心技术
      • Java 8 新特性
      • Java 集合框架
      • Java NIO
      • 并发编程
        • 线程生命周期与线程中断
        • 三个线程交替打印
        • 两个线程交替打印奇偶
        • 优雅终止线程
        • 等待通知机制
        • 万能钥匙:管程
        • 限流器
        • 无锁方案 CAS
    • Java 源码阅读
      • Unsafe
      • 异步计算 Future
      • Java Queue
      • CoalescingRingBuffer 分析
      • Java Collections
        • PriorityQueue 分析
        • HashMap 分析
        • TreeMap
    • Golang
    • Python
  • 框架/组件/类库
    • Guava
      • Guava Cache
      • Guava EventBus
    • RxJava
    • Apache MINA
    • Netty
      • 网络 IO 模型
      • Netty 生产问题
    • Apache Tomcat
    • MyBatis
    • 限流框架
    • Spring Framework
      • Spring Core
      • Spring 事务管理
    • Spring Boot
    • Spring Cloud
      • Feign & OpenFeign
      • Ribbon
      • Eurake
      • Spring Cloud Config
    • FixJ
    • Metrics
    • Vert.x
  • 中间件
    • Redis
      • Redis 基础
        • Redis 数据结构设计与实现
        • Redis 高性能网络模型
      • Redis checklist
      • 应用案例 - Redis 数据结构
      • 应用案例 - Redis 缓存应用
      • 应用案例 - Redis 集群
      • Redis 客户端
      • Redis 生产案例
        • [译] 在 Redis 中存储数亿个简单键值对
    • MySQL
      • MySQL 基础
      • MySQL Index
      • MySQL Transaction
      • MySQL 优化
      • MySQL 内核
      • MySQL Command
      • MySQL Checklist
      • MySQL Analysis Tool
      • 实现 MySQL
    • State Machine
    • 数据库连接池
    • MQ
      • 高性能内存队列 Disruptor
      • Kafka
      • Pulsar
      • RocketMQ
        • Broker 的设计与实现
      • NSQ
  • 实际案例
    • 线上 Case
      • Request Aborted
      • MySQL - Specified key was too long
      • Java 应用 CPU 100% 排查优化
      • 频繁 GC 导致的 Java 服务不响应
      • 导出优化
  • 大数据
    • 流计算
    • Flink
  • 其他
    • 工具
    • 读书
      • 设计数据密集型应用
      • 实现领域驱动设计
      • 精通比特币
      • 提问的智慧
    • 论文
    • 工程博客
    • 阅读源码
    • 面试
      • 如何在最短的时间里对对方有个全面的了解
    • 分享
    • 软技能
    • Todo
  • Blog
    • #算法
      • 查找
      • 位运算
      • 树
    • #架构
      • 1- 通信
    • Design & Dev & Opt
      • High Performance Data structure Design
  • Tiny Project
    • A Simple WeChat-like Instant Messaging Platform
由 GitBook 提供支持
在本页
  • 数据库设计思想
  • 为什么需要数据库?
  • 单机数据库需要应对的问题
  • MySQL 的基础架构与日志系统
  • 高性能 MySQL
  • MySQL 资源列表

这有帮助吗?

  1. 中间件

MySQL

数据库需要完成两个基本的能力:把数据存储起来和读已经存储的数据。

数据库设计思想

  • 在保证逻辑正确的前提下,尽量减少扫描的数据量,是数据库系统设计的通用法则之一。

  • 快速、精确和实现简单,三者永远只能满足其二,必须舍掉其中一个。

  • 如果内存够,就要多利用内存,尽量减少磁盘访问。

为什么需要数据库?

也就是说数据库用来解决什么问题?针对任何领域,所面对的数据都在日益增多,怎么解决,唯一的办法就是做数据管理,平衡数据的增长和我们对数据本身的需求(如检索需求、更新需求等)。如何管理数据是一个比较难的问题

一些闲言碎语:

日常业务开发中会使用到数据库,作为一个可靠的持久化存储,在做存储架构的设计时,考虑的最多的是:怎么合理使用索引;怎么合理使用事务;会不会遇到锁的性能问题(比如会触发什么锁,表锁/行的读锁/行的写锁/间隙锁,会不会引入死锁,怎么提升并发更新的性能等);应对什么样的并发量;应对什么样的数据量。后面两个问题更多的属于数据库架构层面的,需要综合业务发展的阶段和应对的业务量来判断

微观层面:弄清楚单个 MySQL 实例是如何管理数据、处理数据的,数据库启动后,可以接收库和表的创建、然后接受数据更新和数据检索,这个过程是怎么完成的?(引入了很多的设计方面的考虑)

宏观层面:数据持久层怎么应对高并发和海量数据存储,这是数据库架构层面的考量,可以使用读写分离的数据库架构,也可以使用分库分表的数据库架构,还可以使用缓存+数据库的架构,这个时候数据不再是单机处理了,就引入了分布式技术(也意味着引入了分布式的优点和缺点)

单机数据库需要应对的问题

单机数据库重点要解决几大问题:存储、事务、查询、复制、连接、数据库管理等,查询和事务是业务开发过程中最经常使用的数据库的两个核心能力;其次就是复制,解决了扩展性、提高可用性和并发能力的主要武器。

如何学习 MySQL

理解主线:MySQL 事务如何实现,MySQL 索引如何加速查询(SQL 查询流程和 SQL 更新流程);数据增长和访问并发增长带来的问题,以及怎么解决(复制技术/分片技术)

应用:索引 / 锁 / 事务 / SQL

内核:

  1. 事务的ACID特性

  2. 事务并发引起的问题:脏读/不可重复读/幻读/丢失更新等问题

MySQL 的基础架构与日志系统

MySQL 的事务隔离级别如何实现的?

  • 二进制日志 bin-log

对于复制来说,二进制日志在主复制服务器上用来记录要发送给从服务器的语句。二进制日志格式和处理的许多细节都是针对这个目的的。主服务器将其二进制日志中包含的事件发送给其从服务器,从服务器执行这些事件来进行与主服务器上相同的数据更改。从机将从主机上接收到的事件存储在其中继日志中,直到它们可以被执行。中继日志的格式与二进制日志相同。

某些数据恢复操作需要使用二进制日志。在恢复备份文件后,二进制日志中在备份后记录的事件将被重新执行。这些事件使数据库从备份点开始更新。

  • Deep Into InnoDB Storage Engine

  1. MySQL 技术内幕:InnoDB 存储引擎

高性能 MySQL

MVCC

大多数的存储引擎都不是简单的行级锁,基于提升并发性能的考虑,一般都同时实现了多版本并发控制MVCC,但是MVCC的实现并没有统一的标准;可以理解 MVCC 是行级锁的一个变种,但是在很多场景中它避免了加锁操作,因此开销要更低,大部分实现遵循:实现非阻塞的读,写操作只锁定必要的行。

表锁:S 锁 和 X 锁

要看懂死锁需要了解:Session,事务,ACID,多事务并发存在的问题(脏读/不可重复读/幻读/丢失更新),事务隔离级别,MySQL 的锁类型,死锁日志分析

MySQL 资源列表

  • 数据库索引设计与优化 (网盘和本地)

  • 高性能 MySQL

  • MySQL Internals Manual

  • 博客

  • 分析工具

  • benchmark

  • InnoDB

上一页[译] 在 Redis 中存储数亿个简单键值对下一页MySQL 基础

最后更新于4年前

这有帮助吗?

, 以及

in 查询为什么慢

重点看

MySQL 死锁案例

死锁案例:

A parser for InnoDB file formats ,

https://dev.mysql.com/doc/internals/en/innodb.html
MySQL 技术内幕:InnoDB 存储引擎
MySQL 官方手册
How to analyze and tune MySQL query for better performance
MySQL 官方提供的示例数据 Employees
Employees 数据库的表结构关系
数据库内核月报 - 淘宝
https://www.cnblogs.com/wxw16/p/6105624.html
https://juejin.im/post/5c2c53396fb9a04a053fc7fe
https://tech.meituan.com/2014/06/30/mysql-index.html
解决死锁之路 - 学习事务与隔离级别
解决死锁 - 了解锁类型
https://github.com/aneasystone/mysql-deadlocks
系列文章
Some study on database storage internals
innodb_ruby
innodb_ruby wiki
sysbench
基准测试结果
InnoDB internal