网站排名优化推广厦门,23个营销专业术语,模板建站服务公司,wordpress 创建配置文件即使是不懂编程的玩家#xff0c;在对比 NAS 的时候#xff0c;也会两眼放光#xff0c;考虑很多因素#xff0c;比如 RAID 级别、速度、易用程度等。作为时时刻刻与代码打交道的我们#xff0c;更需要关注数据的存取问题。
一开始#xff0c;开箱即用的 MySQL#xff…即使是不懂编程的玩家在对比 NAS 的时候也会两眼放光考虑很多因素比如 RAID 级别、速度、易用程度等。作为时时刻刻与代码打交道的我们更需要关注数据的存取问题。
一开始开箱即用的 MySQL一定是企业的首选。不仅仅因为用的人多更重要的是生态成熟。要工具有工具要人有人。对于老板来说员工看着不爽可以随时辞退是一个非常理想的状态。
但是没有胸怀的老板干的一定不会长久因为如果商务会吹、老板会忽悠业务会飞速发展虽然现在这种机会比较少了。对于 MySQL 来说很快就会遇到问题。
这个时候就需要一些比只会用 MySQL 级别高一些的人才来配合老板圆梦。
是时候了由单机 MySQL 向分布式发展了。
单机 MySQL 面临很多问题。 单表太大比如超过 500w查询就非常吃力 单库太大各种资源告急 读请求太高严重影响写请求
对此一堆概念也是腾空而出比如分库分表、读写分离等。
很长时间以来国内互联网的做法普遍是采用加入一个中间件的方式来解决但随着分布式数据库的技术越来越成熟这些魔法逐渐下沉到它本应该解决的层面--数据库实现层。
留给分库分表技术的时间已经不多了它的存量市场越来越少了。分库分表技术退出历史舞台也是迟早的事情了。
解决上面三个单机 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 的案例这属于想吃螃蟹但并没有吃到。目前来看分布式数据库越来越稳定生态建设也越来越好。而分库分表则属于存量业务终将会退出历史的舞台。