分库又分表,吞吐要爆表
发布于 2021-09-07 10:32 ,所属分类:2021面试经验技巧分享
“你们最大的表,有多少数据量?”
圈子里几个常玩的伙伴,聚在一起吃火锅,或者喝咖啡,通常都会问些特技术范儿的问题。上面这个,就是常问的问题之一。
其实,倒也不是真对数据量感兴趣,而是量大了之后,碰到什么特别有意思的事情,以及,用了什么特别的方法解决。
上亿了之后,怎么解决;上 TB 级别的存储量,又怎么解决。
就这样的问题,如果是在星巴克,大家伙儿都能吹到下半夜去。我记得,最带劲的刘哥,一言不合,就打开黑乎乎的 shell, 给我们演示。
像这样的大表场景,如果分库分表,就是最终杀器。刚开始,几个外企和民企的朋友,还经常吵嘴。一波人说分库分表,另一波说 sharding, partitioning, 吵来吵去,都是一个意思。
如果大家都看过《Designing Data-Intensive Application》,就不会有这种问题。
写入时代大爆炸
怎么实现分库分表呢?
Percona XtraDB Cluster简称PXC。Percona Xtradb Cluster的实现是在原mysql代码上通过Galera包将不同的mysql实例连接起来,实现了multi-master的集群架构。
上图中有三个实例,组成了一个集群,而这三个节点与普通的主从架构不同,它们都可以作为主节点,三个节点是对等的,这种一般称为multi-master架构,当有客户端要写入或者读取数据时,随便连接哪个实例都是一样的,读到的数据是相同的,写入某一个节点之后,集群自己会将新数据同步到其它节点上面,这种架构不共享任何数据,是一种高冗余架构。 作者:罗阿红 出处:http://www.cnblogs.com/luoahong/
MySQLDAL (Data Access Layer )
当年手机之家高春辉领导开发的产品。它解决了单台计算机容量有限的难题。真正实现了分库分表的优势。
DAL 有三大组件,Java Netty 框架,ZooKeep 控态,SQL 处理模块( 通过分解 SQL 生成语法树,依据 SQL 路由表,生成对应的执行路径)
由于 MySQL DAL 是闭源产品,相关的实现没有源码可看。但我看到这篇论文有提及部分原理:
嗯,上次有群水友问,数据库开发与数据库开发有什么区别。大概在这里,可以说的明白了。
一类人,是做CRUD应用系统的开发,比如做个报表,写个ETL;另一类数据库开发,是实现数据库的某项功能,比如分库分表组件。
往期精彩:
本号精华合集(三)
外企一道 SQL 面试题,刷掉 494 名候选人
我在面试数据库工程师候选人时,常问的一些题
零基础 SQL 数据库小白,从入门到精通的学习路线与书单
相关资源