分库分表,可能真的要退出历史舞台了!

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 分库分表,可能真的要退出历史舞台了!


即使是不懂编程的玩家,在对比 NAS 的时候,也会两眼放光,考虑很多因素,比如 RAID 级别、速度、易用程度等。作为时时刻刻与代码打交道的我们,更需要关注数据的存取问题。

一开始,开箱即用的 MySQL,一定是企业的首选。不仅仅因为用的人多,更重要的是生态成熟。要工具有工具,要人有人。对于老板来说,员工看着不爽,可以随时辞退,是一个非常理想的状态。

但是,没有胸怀的老板,干的一定不会长久,因为如果商务会吹、老板会忽悠,业务会飞速发展(虽然现在这种机会比较少了)。对于 MySQL 来说,很快就会遇到问题。

这个时候,就需要一些比只会用 MySQL 级别高一些的人才,来配合老板圆梦。

是时候了,由单机 MySQL 向分布式发展了。

单机 MySQL 面临很多问题。

  1. 单表太大,比如超过 500w,查询就非常吃力
  2. 单库太大,各种资源告急
  3. 读请求太高,严重影响写请求

对此,一堆概念也是腾空而出,比如分库分表、读写分离等。

很长时间以来,国内互联网的做法普遍是采用加入一个中间件的方式来解决,但随着分布式数据库的技术越来越成熟,这些魔法逐渐下沉到它本应该解决的层面--数据库实现层。

留给分库分表技术的时间,已经不多了,它的存量市场越来越少了。分库分表技术,退出历史舞台,也是迟早的事情了。

解决上面三个单机 MySQL 问题,有很多种切入层面。比如,你简单的在 MyBatis 或者 JPA 之上使用 AOP 或者拦截器封装一层,也可以实现,这也是最傻的方式。

再进一步,就可以采用在 JDBC 之上的驱动层来实现,把分库分表的路由维护在内存里,通过重写的 DataSource、Connection、Statment、ResultSet等,对业务进行无侵入的改进。但可惜的是,我们还必须要维护与逻辑表相对应的物理表,而且功能也是阉割的,不确定性依然不小。更要命的是,JDBC 只支持 Java,对于某些公司来说,就非常的不适用。

再就是中间件的传统模式,Proxy。把自己伪装成一个MySQL Server,接受 Client 的请求。至于它后面怎么去操作真实的数据库,你都不需要知道。但 Proxy 本身也是一套服务,你有运维成本在里面,同时功能依然是阉割的。

框架层,驱动层,代理层,在过去很长一段时间里,有无数的互联网公司前赴后继的试水,从 TDDL、Cobar,到 MyCat、ShardingSphere,各种层面的中间件也是层出不穷。但最近几年,这种争相斗艳的场面逐渐不再,到最后剩下来的,也就ShardingSphere这一枝独秀了。

是问题不存在了么?不,正好相反,问题越来越严重。并不是问题消失了,而是它被转化成其他解决方式了。

抛开关系型数据库不说,很久之前,类似于 ElasticSearch、Cassandra这样的 NoSQL 存储,分片和副本的概念,就已经非常成熟了,而且它们是内置的,并不需要 DBA 去人工维护它们的物理位置。

对于关系型数据库来说,走向分布式也终将成为必然。随着 Raft 等协议应用越来越广泛,分布式数据库的可靠性也逐渐得到了保证。如果你以前因为事务问题而拒绝采用某些 NoSQL 产品,那么如今完全兼容 MySQL 的分布式数据库,你没有理由再说 No。

云厂商,直接提供了像Aurora、PolarDB之类的MySQL增强,更有类似 TiDB、OceanBase 这样纯粹的分布式数据库,越来越多的业务走向了这个终途。当你的团队加班加点验证着分库分表中间件的时候,却发现其实换个兼容的存储就能玩得转,你会怎么选,简直不用再多说。

当然,一旦你选用了分布式数据库,以前的 DBA 经验可能就不管用了,比如说索引及其二级索引。你的团队不得不学习新的知识,来应对分布式环境。

但这些都是阵痛,长远看来,分布式数据库是趋势,而分库分表中间件只能吃存量。

当你的业务有了常年累积的复杂数据,你可能会采用复杂的分库分表组件,但如果你的业务比较新,可预见的未来会有大量数据,那一个分布式数据库可能是最合适的。

分库分表中间件并不是消失了。它摇身一变,变成了分布式数据库的一部分。

你可能会听到很多切到分布式数据库,又从分布式数据库切回到 MySQL 的案例,这属于想吃螃蟹但并没有吃到。目前来看,分布式数据库越来越稳定,生态建设也越来越好。而分库分表,则属于存量业务,终将会退出历史的舞台。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能




相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7天前
|
SQL 存储 算法
数据库太慢跑崩的一大罪魁
帐号去重计数是商业分析中的常见需求,通过 SQL 的 COUNT(DISTINCT ...) 实现。然而,当数据量庞大时,COUNT(DISTINCT) 的性能问题凸显,可能导致数据库崩溃。esProc SPL 通过有序数据处理和高效的去重算法,解决了这一难题,尤其适用于复杂的漏斗分析等场景,显著提升了计算效率和资源利用率。
|
6月前
|
存储 Oracle 关系型数据库
“多写多读集群”被攻克,中国数据库产业“越过山丘”
在自主创新的道路上默默苦行了十几年的中国数据库产业,正在越过山丘,等待他们的,将是一个繁荣的数据库生态。
139 5
|
程序员
同步模式之犹豫模式Balking
同步模式之犹豫模式Balking是一种多线程编程中的同步模式。在该模式中,线程在执行操作之前会先检查某些条件,如果发现在执行操作之前会导致某些不良后果,则该线程会放弃执行该操作,避免出现问题。
110 0
同步模式之犹豫模式Balking
|
存储 NoSQL 关系型数据库
分库分表,可能真的要退出历史舞台了!
分库分表,可能真的要退出历史舞台了!
|
存储 缓存 监控
腾讯三面:进程写文件过程中,进程崩溃了,文件数据会丢吗?
腾讯三面:进程写文件过程中,进程崩溃了,文件数据会丢吗?
192 0
腾讯三面:进程写文件过程中,进程崩溃了,文件数据会丢吗?
|
搜索推荐 程序员 Shell
抓狂!这条命令执行完女朋友都跟人跑了!
抓狂!这条命令执行完女朋友都跟人跑了!
139 0
抓狂!这条命令执行完女朋友都跟人跑了!
|
Java 中间件 开发者
不要再用kill -9了,这才是微服务正确的下线方式
不要再用kill -9了,这才是微服务正确的下线方式
181 0
|
算法 关系型数据库 MySQL
新来的领导下令升级 MySQL 8.0,完美掉坑…
你在使用MySQL的Group by分组时,是否发现分组后的数据都是有序的?
367 0
|
SQL 新零售 存储
【双11背后的技术】永不停止的脚步——数据库优化之路
作者:佳毅 前言 2016年双11已经顺利落下帷幕,在千亿电商流量的冲击下,集团数据库整体表现完美。完美表现的背后,隐藏着数据库团队对技术的执着追求。这是一个什么样的团队,他们究竟做了什么,是什么支持着双11这一全民狂欢的数字一次次突破?笔者以一个亲历者的角度来给大家揭开双11背后,阿里巴巴数据库团队的神秘面纱。
5807 0
|
弹性计算 容灾 大数据
黑科技揭秘:阿里云如何做到从业务宕机到恢复业务运行只用一分半钟时间
企业关键业务宕机会带来非常大的损失,而传统的自建容灾方案成本高昂运维复杂,因此高性能的云容灾服务正在成为企业业务持续性保障的优先选择。混合云容灾服务(HDR)-关键业务型的演示完整呈现了将本地服务器上运行的报账系统实时容灾复制到阿里云,并在出现宕机后在云上快速拉起恢复业务的全过程。
3375 0