2、【ShardingSphere】做优化上来就分库分表?请慎重分库分表

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 读写分离,基本是目前商业开发最可靠的手段了。让我们有了更好的数据查询效率。最大的缺陷在于读写分离会增加MySQL服务器的预算。同时MySQL在高并发的情况下,slave也会有延迟,错误等。
分库分表、分区能解决很多的问题,这也是我们在优化的时候常常听到的一些可行的方案,不过提到优化就来分库分表是不是不太合适,本文所阐述的就是分库分表、分区,什么时候用,应该怎么用,怎么选择。

话题起点

最近听到一些学员的面试复述,基本很多的人去面试的时候都会碰到要对MySQL进行优化这样的题目,很多学员很有经验的学员也在这上面栽了跟头。基本回答有几种

  • 加索引
  • 分库分表
  • 分区
  • 读写分离
  • 冷热数据处理

采坑分析

上面的几点,其实能够想到的情况下,看似是不错的。而且很多人也觉得这是标准答案。从表面上看,确实没有很大的问题,实实在在的解决了一些性能问题。不过很多人对这些东西所带来的问题并没有高清楚,同时有些技术在数据库性能不同的阶段是否适合,这个是一个必须要考虑的问题。
采坑的几个点总结如下:

  • 笼统的去描述优化,根本不知道使用的优化策略到底是不是适合的。这个问题在商业开发中很容易出现重大事故
  • 如果只考虑这几点,其实是不太够的,我们还需要考虑磁盘、成本、IO等问题。这个问题商业开发中也是会出现,同时也会极大的增加投入成本
  • 对代码的优化也是必要的,很多的时候,代码、SQL的优化能给我们带来很好的效益,不过这一点对程序员的要求相对较高。商业开发中,很多地方是能跑的就不要动,要是搞不好会全面回归。
这几个点其实都是我们真正做优化的时候需要考虑的。

优化策略分析--索引

索引基本上是我们最常见的一个优化手段了,在单表数据量大的时候如果查询很慢,对我们的条件加一个索引基本是一个很常规的操作。

  • 相信对于重复度很低的字段建索引这错应该是没人犯的,不过很多人却会跳另外一个坑:索引过多、或者索引树过高。这个问题比较无奈,如果说多索引合并成为联合索引能解决根本问题吗?多数这种情况下不是说没有办法解决,而是历史遗留问题限制。如果强行合并,解决了索引过多的问题,代码的问题随之可能就会出现。因为你合并索引,可能导致原有逻辑产生索引失效的问题。

优化策略分析--分库分表

一上来就说分库分表一定要自信看看这一条。分库分表最大的问题在于对原有数据层的影响,基本这种影响是颠覆性的。如果你将分库分表加上,分库分表最直接的就是会让你对老代码的维护工作量暴增。当然,这里的前提是你是做老项目优化。

优化策略分析--分区

MySQL单表能做1024个分区,单库基本能存几十个亿的表。每个分区算一个表,把所有表都做成分区表看似都是可能的。

  • 确确实实,在商业开发当中,分区是一个很重要的优化手段。分区能给我们带来什么:用单表存储亿级的数据而不会产生查询时间过长,清理表也很方便。
  • 缺点:分区带来了很好的用户体验,但是随之而来的就是庞大的运维工作量。试想一下,假若我们一个项目核心表差不多100张,每张建365个分区。总共算下来,分区就会有36500个。相当于我每天要去维护100个表。

优化策略分析--读写分离

读写分离,基本是目前商业开发最可靠的手段了。让我们有了更好的数据查询效率。最大的缺陷在于读写分离会增加MySQL服务器的预算。同时MySQL在高并发的情况下,slave也会有延迟,错误等。

优化策略分析--冷热数据处理

冷热数据的分离,其实对于很多项目来讲,是减轻MySQL负担的一个很好的策略。能给保障MySQL数据库性能一直良好。
它的问题在于对于某些业务,不能区分冷热界限。同时冷热数据也会在某些场景下产生,人工维护的工作。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
SQL 存储 数据库连接
什么是分库分表,为什么要分库分表?
笔者经常将缓存、分库分表、消息队列定义为高并发三剑客。开发互联网应用系统时,分库分表是一个绕不开的技术点。 这篇文章,我们会探讨如下问题:
|
Java 中间件 数据库连接
分库分表的4种方案
分库分表的4种方案
1018 0
|
7月前
|
存储 算法 数据库连接
为什么要分库分表
为什么要分库分表
为什么要分库分表
|
弹性计算 Java 关系型数据库
分库分表比较推荐的方案
ShardingSphere 绝对可以说是当前分库分表的首选!ShardingSphere 的功能完善,除了支持读写分离和分库分表,还提供分布式事务、数据库治理等功能。另外,ShardingSphere 的生态体系完善,社区活跃,文档完善,更新和发布比较频繁
206 0
|
数据库
分库分表是一种数据库优化方式
分库分表是一种数据库优化方式
71 1
|
SQL 缓存 关系型数据库
什么情况下需要考虑分库分表?
什么情况下需要考虑分库分表?
159 0
|
存储 算法 数据库
一次难得的分库分表实践(上)
一次难得的分库分表实践
|
SQL 算法 数据可视化
ShardingSphere 分库分表(2)-单表分表解决方案
老表 id 根据情况迁移到新表后可以用原始 id 值,也可以重新生成新的 id。如果你的业务并没有用老表 id 作任何业务操作只是一个主键标识,那么无所谓改不改,如果为了统一也可以重新用算法生成新的 id。而如果老表 id 本身有参与业务,比如你的 SQL 里面有利用这个字段关联表,那么就不要动了,因为成本非常高,改的东西很多,个人认为没有必要。
ShardingSphere 分库分表(2)-单表分表解决方案
|
消息中间件 中间件 数据库
也谈分库分表在实际应用的实践(上)
也谈分库分表在实际应用的实践(上)
153 0
也谈分库分表在实际应用的实践(上)