当前位置: 首页 > 科技观察

数据库:远必合,远必分

时间:2023-03-16 23:55:58 科技观察

开源、高性能、生态成熟的MySQL是国内应用最广泛的数据库。说MySQL见证了中国互联网的成长史也不为过。阿里基于MySQL搭建OceanBase;京东和腾讯也在大规模使用MySQL。因此,不愧为面试官必问且爱问的核心知识点。很多朋友对索引和存储的原理有疑惑。当数据量达到一定规模时,MySQL还会涉及到一个几乎可以肯定知道的核心点——分库分表。画外音:MySQL是DB-Engines评选的2019年最受欢迎的数据库,这些年一直徘徊在前三名。问题一:分库分表解决什么问题?MySQL的性能瓶颈是B+树索引。当数据量过大时,索引消耗的磁盘IO越来越多,查询性能下降。在高并发的情况下,单表数据量大导致SQL性能不佳,而数据库服务器的高负载导致性能再次下降,更是雪上加霜。高可用:在微服务架构下,无状态的服务会导致数据库的压力点。单机数据库和主从结构已经不能满足需求。同时,数据容灾等维护成本也越来越高。安全性:所有不同类型的数据都存储在一个数据库中。当数据库宕机或物理损坏时,很容易造成不可估量的损失。画外音:把你的鸡蛋放在不同的篮子里。问题2:分库分表的逻辑是什么?分库分表的核心是数据拆分。比如MySQL单表数据的限制是5000万左右。当数据量超过5000万时,我们需要将数据存储在单独的表中。简单来说就是将一个表结构拆分成多个表,或者说将一个表的数据拆分成多个表。这些表可以放在同一个数据库中,也可以放在不同的数据库中,甚至可以放在不同的数据库实例中。问题三:面试官问,分库分表有哪些方案?数据拆分方式:水平拆分垂直拆分常见方案:客户端分片代理分片支持事务型分布式数据库【本文为专栏作者《58神剑》原稿,转载请联系原作者】点此查看更多精彩该作者的文章