读高性能MySQL(第4版)笔记18_扩展MySQL

一文搞懂MySQL的MVCC原理及如何解决幻读 在之前的文章中详细的介绍了 MySQL 中的事务和隔离级别,在并发访问数据库造成的问题(脏读、不可重复读、幻读),而 MVCC 就是在尽量减少锁使用的情况下高效避免这些问题。 阅读详情

1. 增长

1.1. 在高速的业务环境中,流量可能逐年增长几个数量级,环境会变得更加复杂,随之而来的数据需求也会快速增加

1.2. 扩展Web服务器

1.2.1. 在负载均衡的后端添加更多的服务器节点,而这通常就是扩展We b服务器的全部工作

2. 可扩展性

2.1. 系统支撑不断增长的流量的能力

2.1.1. 可扩展性就是能够通过增加资源来提升容量的能力

2.2. 一个系统扩展能力的好坏可以用成本和简单性来衡量

2.3. 容量是一个和可扩展性相关的概念

2.3.1. 系统容量表示在一定时间内能够完成的工作量

2.3.2. 容量可以简单地被认为是处理负载的能力,从几个不同的角度来考虑负载很有帮助

2.4. 系统的最大吞吐量并不等同于容量

2.4.1. 如果达到最大吞吐量,则性能会下降,响应时间会变得不可接受且非常不稳定

2.5. 即使系统性能不是很高也可以具备可扩展性

2.6. 数据量

2.6.1. 应用所能累积的大量数据是可扩展性最普遍的一个挑战

2.6.2. 应用从不删除任何数据

2.7. 用户数

2.7.1. 当查询依赖于用户间的关系时(关系的数量可以用N*(N-1)/2来计算,这里N表示用户数

2.8. 用户活跃度

2.8.1. 不是所有的用户的活跃度都相同,并且用户活跃度也不总是不变的

2.9. 相关数据集的大小

2.9.1. 社交网站经常会面临由那些人气很旺的用户组或朋友很多的用户所带来的挑战

2.10. 可扩展性的原则之一是避免节点之间的交叉访问

2.11. 请专注于确定业务是读限制的还是写限制的

3. 扩展MySQL的理论思想

3.1. 优先使用更小的实例

3.1.1. 按功能、水平方式或两者兼而有之来分割数据

3.1.2. 当故障发生时,实例越小,所造成的影响面也越小

3.2. 通过复制和自动写故障切换来增强弹性

3.2.1. 在发生故障时,自动进行写入故障切换,并管理拓扑更改和对数据库节点的应用程序访问,以使写停机时间尽可能短

3.3. 通过半同步复制保证持久性

3.3.1. 相对于默认的异步复制

4. 读限制与写限制工作负载

4.1. 工作负载

4.1.1. 系统能达到的QPS数

4.1.2. 是所有类型的查询及其延迟的混合

4.2. 读限制工作负载

4.2.1. 读限制工作负载是指读取(SELECT)总流量超过服务器容量的工作负载

4.2.2. 单源主机

4.2.2.1. 增加更多应用节点可以扩展服务用户请求的客户端数
4.2.2.2. 最终会被单源数据库主机的能力所限制,该数据库主机将要负责响应所有的读取请求
4.2.2.3. 高CPU使用率意味着服务器正花费所有的时间处理查询
4.2.2.4. CPU的使用率越高,查询的延迟也会越长

4.2.3. 引入副本来扩展读流量

4.3. 写限制工作负载

4.3.1. 写限制工作负载则超过了服务器提供DML(INSERT、UPDATE、DELETE)操作的容量

4.3.2. 当写入量成为瓶颈时,必须开始考虑使用拆分数据的方法,以便在单独的子数据集上接受并行的写入

4.3.3. 仔细检查schema,确定是否存在读需求增长比其他写需求增长更快的表数据子集

5. 功能拆分

5.1. 基于业务中的“功能”来拆分数据是一项和业务背景强相关的任务,需要深入了解数据的用途

5.2. 指导原则

5.2.1. 不要根据工程团队的组织架构进行拆分,它会经常变动

5.2.2. 根据业务功能来拆分表

5.2.3. 不要回避处理数据中混杂了不同业务关系的问题,你不仅需要倡导数据分离,还需要倡导应用程序重构,并需要引入API来实现相互跨界的访问

6. 用读池扩展读

6.1. 集群中的副本可用于多个目的

6.1.1. 副本是故障切换的候选对象

6.2. 并非所有的复制副本都在池中,这是一种防止不同的读取工作负载相互影响的常见方法

6.3. 使用读池时会有不止一台服务读请求的数据库主机

6.4. 管理这些读池的一种非常常见的方法是使用负载均衡器来提供虚拟IP

6.4.1. 该IP充当所有要访问读副本的流量的中介

6.4.2. 技术包括HAProxy、自用主机时的硬件负载均衡器,或在公共云环境中运行时的网络负载均衡器

6.5. 在MySQL中,建议使用leastconn实现池节点之间的平衡

6.6. 服务发现是一个很好的选择,它可以自动发现新的主机并将其加入池列表

6.7. 每个副本池至少还要有三个节点服务于特定应用

6.8. 读池健康检查

6.9. 选择负载均衡器算法

6.9.1. 随机

6.9.1.1. 负载均衡器将每个请求定向到从可用服务器池中随机选择的服务器

6.9.2. 轮询

6.9.2.1. 负载均衡器以重复的顺序向服务器发送请求

6.9.3. 最少连接

6.9.3.1. 下一个连接指向拥有最少活跃连接的服务器

6.9.4. 最快响应

6.9.4.1. 处理请求最快的服务器接收下一个连接

6.9.5. 哈希

6.9.5.1. 负载均衡器对连接的源IP地址进行哈希处理,这会将地址映射到池中的一台服务器

6.9.6. 权重

6.9.6.1. 负载均衡器可以组合几种算法并添加权重

6.9.7. MySQL的最佳算法取决于具体工作负载

6.9.7.1. 一定要考虑在特殊情况下和日常情况下会发生什么

7. 排队机制

7.1. 使用设计上倾向于一致性而不是可用性的数据存储来扩展写事务时,扩展应用程序层会变得复杂得多

8. 使用分片扩展写

8.1. 分片意味着将数据切分成不同的、更小的数据库集群

8.1.1. 可以同时在更多的源主机上执行更多的写入操作

8.2. 功能分割(Functional partitioning)

8.2.1. 职责划分

8.2.2. 将不同的节点用于不同的任务

8.3. 数据分片(Data sharding)

8.3.1. 当今扩展超大型MySQL应用程序最常见和最成功的方法

8.4. 只对需要分片的数据进行切分

8.4.1. 通常是数据集中增长非常大的部分

8.5. 切分方案

8.5.1. 目标是使最重要和最频繁的查询接触到尽可能少的分片

8.6. 多个分片键

8.6.1. 复杂的数据模型使数据分片更加困难

8.7. 跨分片查询

8.7.1. 主动缓存通常也是有必要的

8.7.2. 设计间歇性运行的清理程序

8.8. Vitess

8.8.1. Vitess是面向MySQL的一个数据库集群系统

8.8.2. 一个用于运行数据库层的稳定平台,而不是一个临时的解决方案

8.8.3. 测试并记录向整个系统引入的延迟

8.8.4. 使用金丝雀部署模型

8.8.5. 特性

8.8.5.1. 支持水平分片,包括数据分片
8.8.5.2. 拓扑结构管理
8.8.5.3. 源节点故障切换管理
8.8.5.4. schema变更管理
8.8.5.5. 连接池
8.8.5.6. 查询重写

8.8.6. 组件

8.8.6.1. Vitess pod
8.8.6.1.1. 对一组数据库和Vitess相关部件的通用封装
8.8.6.2. VTGate
8.8.6.2.1. 为应用程序与操作员控制数据库实例访问提供的服务
8.8.6.3. VTTablet
8.8.6.3.1. 在Vitess管理的每个数据库实例上运行的代理
8.8.6.4. Topology
8.8.6.4.1. 在给定的pod中保存由Vitess管理的数据库实例清单以及相应的信息
8.8.6.4.2. 元数据存储
8.8.6.5. vtctl
8.8.6.5.1. 对Vitess pod进行操作更改的命令行工具
8.8.6.6. vtctld
8.8.6.6.1. 用来进行相同管理操作的图形化界面

8.9. ProxySQL

8.9.1. René Cannaò

8.9.1.1. MySQL的长期贡献者

8.9.2. 专门为MySQL协议编写的,通过通用公共许可证(GPL)发布

8.9.3. 提供了一个易于部署的抽象,比HAProxy更复杂,但在基础设施和复杂性方面的前期投入较少

8.9.4. 可以使用ProxySQL作为任何应用程序代码和MySQL实例的中间层

8.9.5. 一个很好的轻量级中间层,而且是分片感知的,还可以相应地路由应用程序连接

8.9.6. 按用户分片

8.9.7. 按schema分片

MySQL 4th Edition 第四版 Paperback: 1224 pages Data: September 8, 2008 Description: The unexpected pleasure of reading books about databases is that they are often written by authors with highly organized minds. Paul DuBois and his editors at New Riders have assembled MySQL with a clarity and lucidity that inspires confidence in the subject matter: a (nearly) freely redistributable SQL-interpreting database client/server primarily geared for Unix systems but maintained for Windows platforms as well. What isn't "free" about MySQL (the application) is its server's commercial use; all clients and noncommercial server use are free. DuBois's tome isn't free either, but its list price is modest in light of its value and the value of its namesake. The volume is superbly organized into 12 chapters and 10 appendices and contains a concise table of contents and a comprehensive 50-page index. It is peppered with references to the online HTML documentation that comes with the source and binary distributions (which are available and easy to install in stable rpm and tar releases.) The first third of MySQL is an excellent instruction tool for database newbies; the second third is a detailed reference for MySQL developers; and the last third consists of clearly annotated appendices, including C, Perl (but not Python), and PHP interfaces. Perhaps as an indication of the collective will of the developers of MySQL, DuBois does not separate Windows 95/98/NT design or development specifics from its main discussions. Platform-independent design is a goal, not a reality, and users will have to rely on newsgroups and mailing lists for details. Moreover, security issues are addressed in a mere 18 pages, a large part of which is devoted to standard Unix file and network-access permissions. Next to nothing is mentioned about defense against common hacking strategies, the use of secure shell interfaces, or access encryption. Although it is nearly 800 pages in length, DuBois's book is thankfully not encyclopedic. It is a valuable précis of the MySQL database, and its easy-to-skim look and feel will make it an excellent browse for database experts who want to know what is and is not possible within MySQL, the application. 立即下载

相关推荐

SiC MOSFET驱动设计实战:从特性解析到电路优化

本文深入解析SiC MOSFET的核心特性及其驱动电路设计要点,涵盖高温稳定性、快速开关能力等关键特性,并提供驱动电压配置、电流能力计算、布局优化等实用方案。特别针对第三代电力电子半导体SiC MOSFET的驱动要求,分享STGAP1AS等典型驱动方案的应用技巧,助力工程师解决高频应用中的EMI和热管理挑战。

weixin_29230865的博客 365

高性能MySQL第四版-1

第四版删除了第三版的这两段:MySQL 最初 基于 ISAM 构建( 后来 被 MyISAM 取代), 其后 陆续 添加 了 更多 的 存储 引擎 和 事务 支持。MySQL 有 一些 怪异 的 行为 是由 于 历史 遗留 导致 的。。。当然, 存储 引擎 API 的 架构 也有 一些 缺点。有时候 选择 多 并非 好事, 而在 MySQL 5. 0 和 MySQL 5. 1 中有 太多 的 存储 引擎 可以 选择。InnoDB 对于 95% 以上 的 用户 来说 都是 最佳 选择。。。

十八年后又是一条好汉的博客 831

【Unity】YooAsset + HybridCLR热更

本文介绍了Unity游戏开发中的热更新技术方案,重点对比了资源热更和代码热更的主流工具。资源热更方面分析了Asset Bundle、Addressable和YooAsset的优缺点;代码热更部分比较了xLua、ILRuntime、InjectFix和HybridCLR的性能特点。文章详细演示了HybridCLR+YooAsset的实践方案,包括加载热更新程序集、反射调用热更代码、资源打包部署等完整流程。该方案通过原生运行时实现程序集级热更,具有极低性能损耗和全生命周期适用性,配合YooAsset简化了资源管

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 2914

读高性能MySQL(第4版)笔记12_查询性能优化(下)

查询性能优化

lyingSeven的博客 205

同济大学824复试全攻略:从笔试到面试的实战解析

本文详细解析同济大学824复试全流程,包括专业课笔试、外语听力与口语、专业外语笔试和专业综合面试的备考策略。重点分享数字信号处理、计算机网络等专业课的高效学习方法,以及专业外语速成和口语面试技巧,助力考生全面提升复试表现。

qq_27496129的博客 1053

PostgreSQL+Citus分布式集群实战:从零搭建到性能调优

本文详细介绍了如何从零开始搭建并优化PostgreSQL+Citus分布式数据库集群。内容涵盖集群规划、源码编译安装、Citus扩展部署、节点配置、分布式表创建以及核心性能调优策略,为应对海量数据增长提供了完整的部署指南和实战解决方案。

oo7890的博客 626

读高性能MySQL(第4版)笔记01_MySQL架构(上)

1.逻辑架构 1.1.大多数基于网络的客户端/服务器工具或服务器都有类似的服务 1.1.1.连接处理 1.1.2.身份验证 1.1.3.确保安全性 1.2.核心层 1.2.1.查询解析、分析、优化、以及所有的内置函数 1.2.2.跨存储引擎的功能 1.2.2.1.存储过程 1.2.2.2.触发器 1.2.2.3.视图 1.3.存储引擎层 1.3.1.存储引擎负责MySQL中数据的存储和提取 1.3.2.和GNU/Linux下的各种文件系统一样,每种存

1189

HC32F460 FPU实战:从零开启硬件浮点加速

本文详细介绍了如何在HC32F460开发板上启用和优化FPU(浮点运算单元),以显著提升硬件浮点运算性能。从工程配置、关键代码修改到实战优化技巧,全面解析FPU加速的实现方法,并分享常见问题的解决方案,帮助开发者避免常见陷阱,充分发挥HC32F460的硬件潜力。

weixin_42620340的博客 348

高性能MySQL(第四版):一、MySQL架构

高性能MySQL(第四版):MySQL架构

Xin_code 1736

2011-2024年间各省数字普惠金融指数数据(覆盖广度、使用深度和数字化程度)

2、指标:数字金融普惠指数、数字金融覆盖广度指数、数字金融使用深度指数、普惠金融数字化程度指数、数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。中国各省的数字普惠金融指数数据,从数字金融覆盖广度、数字金融使用深度和普惠金融数字化程度3个维度来构建数字普惠金融指标体系。数字普惠金融指数一共3个维度、33项具体指标。全套指数包含数字金融覆盖广度指数、数字金融使用深度指数和普惠金融数字化程度指数,以及数字金融使用深度指数下属的支付、保险、货币基金、信用服务、投资、信贷等分类指数。

【优快云】 1万+

基于STM32、HAL库的MPX5500DP气压传感器 驱动程序设计

define MPX5500DP_MIN_VOLTAGE 0.2f // 最小输出电压(V)#define MPX5500DP_MAX_VOLTAGE 4.7f // 最大输出电压(V)#define MPX5500DP_MIN_PRESSURE 0.0f // 最小压力(kPa)#define MPX5500DP_MAX_PRESSURE 500.0f // 最大压力(kPa)* @brief 读取压力值(kPa)// 计算压力值 (线性转换)

corlin6688的博客 196

高性能MySQL 第4版

Performance Schema同了有关MySQL服务器内部运行的操作上的底层指标。Performance Schema有两个概念:程序插桩:程序插桩在MySQL代码中插入探测代码,以获取我么你想了解的信息。消费者表:指存储关于程序插桩代码信息的表。如果我们为查询模块添加插桩,相应的消费者表将记录诸如执行总数、未使用索引的次数、花费的时间等信息。消费者表是插桩发送信息的目的地。

xx先森 1344

Yocto系列讲解[入门篇] 1 - 快速入门熟悉Yocto的构建

yocto quick start up带大家快速上手

fulinux的博客 5万+

读高性能MySQL(第4版)笔记21_读后总结与感想兼导读

总结与感想和导读

lyingSeven的博客 996

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

MySQL 幻读

快照读(普通select语句),是通过MVCC 方式解决了幻读当前读(select … for update),是通过next-key lock(记录锁+间隙锁)来解决幻读但MySQL 可重复读隔离界别并没有彻底解决幻读问题,只是很大程度上解决了幻读现象非发生。

一起加油!!! 4509

简单聊聊mysql的脏读、不可重复读、幻读

最近,在一次 mysql 死锁的生产事故中,我发现,关于 mysql 的锁、事务等等,我所知道的东西太碎了,所以,我试着用几个例子将它们串起来。具体做法就是通过不断地问问题、回答问题,再加上“适当”的比喻,来逐步构建脑子里的“知识树”。 需要提醒一下,这篇博客并不适合小白,因为你需要先了解排它锁、共享锁、事务,最重要的是你需要知道事务中的锁是什么时候加上、什么时候打开的。而这篇博客更多的是希望把这些碎片化的知识给连接起来。 项目环境 mysql 版本:5.7.28-winx64 OS:win 10 数据库脚

子月生的博客 3749

mysql在可重复读下,怎么解决的幻读

快照读通过MVCC机制,确保事务在其生命周期内看到的数据是一致的。当前读通过Next-Key Locking机制,锁定查询范围内的记录及其间隙,防止其他事务在这些间隙中插入新记录。虽然这些机制在很大程度上解决了幻读问题,但在某些极端情况下,幻读仍然可能发生。因此,在实际应用中,可能需要根据具体需求和场景,选择合适的隔离级别和锁机制来确保数据一致性。

xue0147的专栏 875

MySQL 可重复读隔离级别,完全解决幻读了吗?

Mysql可重复读隔离级别,完全解决幻读了吗?1、针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读,因为可重复读隔离级别下,事务执行过程中看到的数据,一直跟这个事务启动时看到的数据是一致的,即使中途有其他事务插入了一条数据,是查询不出来这条数据的,所以就很好了避免幻读问题。

qq_45981373的博客 1949

mysql-8.0.18免安装版安装过程

mysql-8.0.18免安装版安装过程 解压到指定目录,我是D:\Program Files\mysql-8.0.18-winx64 安装会用到的重要命令:后边会有更详细说明 初始化安装: bin\mysqld --initialize --console //root会有密码,注意执行后的第四行,会显示密码,要记住. bin\mysqld --initialize-insecur...

2864

Ubuntu18.04 安装MySQL

Ubuntu18.04 安装MySQL

Weison 34万+

深度整理总结MySQL——可重复读隔离是否完全解决幻读

可重复读隔离级别不能完全规避幻读问题!

左灯右行的爱情 1371

MYSQL可重复读隔离级别与幻读

MySQL InnoDB 引擎的可重复读隔离级别(默认隔离级),根据不同的查询方式,分别提出了避免幻读的方案:• 针对快照读(普通 select 语句),是通过 MVCC 方式解决了幻读。• 针对当前读(select ... for update 等语句),是通过 next-key lock(记录锁+间隙锁)方式解决了幻读。第一个例子:对于快照读, MVCC 并不能完全避免幻读现象。因为当事务 A 更新了一条事务 B 插入的记录,那么事务 A 前后两次查询的记录条目就不一样了,所以就发生幻读。

wt20050610的博客 832

MySQL是如何实现读已提交和可重复读的——MVCC原理

隔离级别有有有无有有无无有无无无MySQL有四种隔离级别:读未提交、读已提交、可重复读和串行化,它们分别用来解决脏读、不可重复读和幻读的问题。**脏读:**一个事务读取到另一个事务还未提交的数据。**不可重复读:**在一个事务中多次读取同一个数据时,结果出现不一致。**幻读:**在一个事务中使用相同的 SQL 两次读取,第二次读取到了其他事务新插入的行。直接进入本文主题——MySQL是如何实现读已提交和可重复读的?

2401_84170522的博客 1104

MySQL,MVCC详解,快照读在RC、RR下的区别

最近感觉写博客越来越难写了,不再像以前对于写出来的东西只是为了一个产出,不去看质量。就比如说学习这个MVCC的时候,别的博客都已经写的很好了,但是不去自己按照理解写出来又好像不合适。(诚然我写出来的不可能是比那些大佬写得好) 一、什么是MVCC 我们在操作数据库的时候总是这四大类 读读 读写 写读 写写,读读肯定是没有任务数据问题的,但对事物有了解的同学就会知道,读写、写写操作很容易就会导致数据不一致。 在此之前解决这类问题的常用方式就是加锁,听名字就知道这是个很复杂、很耗性能的操作,所以大神们不满足这个

小道仙的后宫 2652
上一篇: 学信息系统项目管理师第4版系列35_补遗
下一篇: 读高性能MySQL(第4版)笔记19_云端和合规性
躺柒
博客等级 码龄4年 7004粉丝 1317原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值