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

news/2024/5/18 22:59:20 标签: shardingJdbc, JDBC, 分库分表, 数据库, orm

分库分表、分区能解决很多的问题,这也是我们在优化的时候常常听到的一些可行的方案,不过提到优化就来分库分表是不是不太合适,本文所阐述的就是分库分表、分区,什么时候用,应该怎么用,怎么选择。

话题起点

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

采坑分析

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

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

这几个点其实都是我们真正做优化的时候需要考虑的。

优化策略分析–索引

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

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

优化策略分析–分库分表

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

优化策略分析–分区

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

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

优化策略分析–读写分离

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

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

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


http://www.niftyadmin.cn/n/1638657.html

相关文章

wm8976声卡芯片的外部引脚分析

1、WM8976外部引脚图 2、引脚描述表 3、重点关注引脚(由于I2S部分程序一样,只需修改控制部分的程序) (1)控制部分(2440的GPIO接口)(控制接口和芯片的寄存器不一样) L3M…

为什么我的项目打不开呀,请帮忙

我现在用的是vs2002,打开一个项目,会出现下面这么一句话“无法读取项目文件“某某.csproj”,项目文件已被重名或已不在解决方案中”这一项目是在vs2003下编写的,是不是说vs2003编写的在vs2002是打不开的?转载于:https://www.cnblo…

Oracle pl/sql编程语言基本命令入门

pl/sql编程语言 pl/sql编程语言用于存储过程和存储函数 声明方法 declare 申明字段 begin 业务处理 end; 例子: -- 声明方法 declarei number(2) : 10;s varchar2(10) : 小明;ena emp.ename%type;-- 引用型变量emprow emp%rowtype;-- 记录型变量 begindbms_outpu…

wm8976的初始化函数、写寄存器函数和音量控制函数分析

1、wm8976的写寄存器函数 (1.1)时序图 (1.2)函数 static void wm8976_write_reg(unsigned char reg, unsigned int data) { int i; //对于wm8976来说,传输的是16位数据,这16位数据里面,高七位…

【ShardingSphere】shardingjdbc入门案例-springboot整合shardingjdbc

该教程仅仅适用于4.x版本,在ShardingSphere的迭代历史中很多的配置和兼容问题很大,这里入手一定要注意版本。 构建一个SpringBoot项目 SpringBoot项目的构建这里不再赘述,这里要提及的一点就是我们构建的时候,基本不需要引入依赖…

HttpClient和jsoup基础API使用

准备配置 pom <dependencies><!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient --><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>…

属性参数 - 位置参数和命名参数

如前一节所述&#xff0c;RegKeyAttribute属性构造器为&#xff1a;public RegKeyAttribute(RegHives Hive, String ValueName)根据这个属性构造器原型&#xff0c;我们把这个属性附着给一个字段&#xff1a;[RegKey(RegHives.HKEY_CURRENT_USER, "Foo")]public int …

传统LPC声码器的语音模型

1、先了解LPC和声码器这两个概念 &#xff08;1&#xff09;LPC LPC&#xff08;linear predictive coding&#xff0c;LPC&#xff09;&#xff0c;也就是线性预测编码。原理在"线性预测编码"这篇文章有讲。 &#xff08;2&#xff09;声码器 在发送端对语音信号…