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

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


即使是不懂编程的玩家,在对比 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 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能




相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
API 数据安全/隐私保护
如何使用Postman 测试Https 网站?
大家好,我是阿萨。 昨天我们学习了Postman 导入导出API 的用法。针对日常工作测试工作的最基本用法就介绍完了。
1475 0
如何使用Postman 测试Https 网站?
|
11月前
|
机器学习/深度学习 数据可视化 数据处理
构建可靠的时间序列预测模型:数据泄露检测、前瞻性偏差消除与因果关系验证
在时间序列分析中,数据泄露、前瞻性偏差和因果关系违反是三大常见且严重影响模型有效性的技术挑战。数据泄露指预测模型错误使用了未来信息,导致训练时表现优异但实际性能差;前瞻性偏差则是因获取未来数据而产生的系统性误差;因果关系违反则可能导致虚假相关性和误导性结论。通过严格的时序数据分割、特征工程规范化及因果分析方法(如格兰杰因果检验),可以有效防范这些问题,确保模型的可靠性和实用性。示例分析展示了日本天然气价格数据中的具体影响及防范措施。 [深入阅读](https://avoid.overfit.cn/post/122b36fdb8cb402f95cc5b6f2a22f105)
650 24
构建可靠的时间序列预测模型:数据泄露检测、前瞻性偏差消除与因果关系验证
|
设计模式 前端开发 PHP
【PHP开发专栏】ThinkPHP框架实战开发
【4月更文挑战第29天】ThinkPHP是中国流行的PHP框架,以其轻量级、模块化和高安全性受到开发者欢迎。本文介绍了ThinkPHP的基础,包括MVC设计模式,以及核心组件如路由、数据库操作、表单处理、模板引擎和错误处理。通过一个博客系统示例,展示了如何进行项目开发,包括控制器、模型和视图的创建。使用ThinkPHP能有效提升开发效率,帮助开发者快速构建复杂的Web应用。
345 0
|
Oracle 关系型数据库 MySQL
OceanBase兼容性
【8月更文挑战第13天】OceanBase兼容性
1489 5
|
安全 算法 网络安全
网络安全的守护者与挑战者:漏洞、加密技术与安全意识的博弈
在数字时代的浪潮中,网络安全成为维护信息资产的重要防线。本文深入探讨了网络安全的核心要素——网络漏洞、加密技术和用户安全意识,以及它们之间的相互作用。通过分析最新的研究数据和案例,本文揭示了网络攻击的常见模式、加密技术的最新进展以及提升安全意识的有效策略。文章旨在为读者提供一套全面的网络安全知识框架,帮助他们在日益复杂的网络环境中保持警惕,采取适当的防护措施。
130 27
|
C语言
C语言中的无参函数
C语言中的无参函数
964 1
|
安全 NoSQL Redis
服务器又被攻击了,我这样做...
近期遭遇阿里云服务器频繁报警,经分析发现是由于测试服务器所有端口对公网开放,导致自动化程序对其扫描。黑客可能利用类似Redis的未授权访问漏洞进行攻击。为避免此类问题,建议:1. 不开放不必要的端口;2. 避免以root权限运行服务;3. 设置服务器IP白名单;4. 定期更换密码。保持良好安全习惯可保障服务器安全。
4131 4
服务器又被攻击了,我这样做...
|
网络协议 Linux 开发工具
Centos7 /etc/sysconfig/network-scripts/ifcfg-<interface>网络配置
自动化网络配置:NetworkManager 可以自动检测网络连接,并根据网络环境自动配置网络。这使得用户可以无需手动配置即可连接到网络。 支持多种网络连接:NetworkManager 支持多种网络连接,包括有线、无线、VPN、Wi-Fi 热点等。这使得用户可以根据需要选择合适的网络连接。 提供图形化和命令行工具:NetworkManager 提供了图形化工具和命令行工具,用户可以根据自己的喜好选择使用。
1526 4
|
存储 消息中间件 Java
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
Java多线程实战-异步操作日志记录解决方案(AOP+注解+多线程)
|
JavaScript 前端开发
JavaScript弹窗事件
JavaScript弹窗事件
139 0