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

分库分表,吞吐量将爆发

时间:2023-03-13 06:14:00 科技观察

本文转载自微信公众号《关于SQL》,作者Lenis。转载本文,有关SQL公众号请联系。“你最大的手表有多少数据?”几个经常在一起玩的圈子里的朋友,聚在一起吃火锅或者喝咖啡,一般都会问一些技术问题。以上是常见问题之一。其实我对数据量不是很感兴趣,而是数据量大了之后,遇到什么特别有意思,用什么特殊的方法解决。几亿之后,怎么解决;如何解决TB级的存储容量。对于这样的问题,如果是在星巴克,大家可以吹到半夜。记得最有活力的刘大哥,在大家意见不合的时候,开了一个暗壳,给我们演示了一下。在这种大表的场景下,如果把数据库分表,就是最终的杀手锏。一开始,外企朋友和私企朋友经常吵架。一组人讲分库分表,一组人讲分库、分区、吵架。它们的意思都是一样的。分区不是数据库中常说的表分区。其实就是分库分表的意思。Sharding是MongoDB、ElasticSearch等NoSQL数据库的专有名词,用于分库分表。那么,分库分表如何使用,涉及到哪些原则呢?说实话,这个话题太大了。在这篇文章中,我不能谈论这一切。我只挑我看得懂的。读写,数据库的书这个好像是废话。数据库不就是用来存储和返回数据的吗?是的,同学们,你们可以放下砖头了,现在还不是砸我的时候。阅读和写作是最基本的,就像吃饭和锻炼一样,是最基本的生理活动。如果人们吃得太多,或者运动太多,那么问题就会很严重。一旦读写开始增多,也会带来一系列的问题。读自己的数据,让别人没有数据可读,可不是闹着玩的。但是它有一个前提,就是数据库的连接数是有限制的。一旦超过配额,就不能再建立新的连接。此时只有第一个连接的用户可以读取数据。后续请求只能排队,或者干脆收到超时(timeout)警告。说到这里,对了,前两天讲Replication的时候,提到了农村看电影的例子。80年代的农村,经常有剧团来放露天电影。所谓“露天”,就是在村头临时搭个戏台,挂上幕布,放映电影,放上扩音器,村民们就开始看电影了。画个小品,大致是这样的:这个露天电影有一个不舒服的地方,前排的人是聋子,后排的人什么也听不见。观影体验实在是太差了,所以整场看完,只有小朋友和真正的影迷才能坚持到最后。其他人都跑了。于是剧团想了个办法,在村头村尾搭戏台。这将容纳更多的人。有的村子实在是人口太多,所以在村子的东西两边多了两个台阶。这样一来,村里的每一个人都能得到照顾。为实现这一目标,只需要复制3份胶卷。这就是数据库复制的工作原理。当数据被复制成多份时,它可以被更多的人阅读。所谓“人生留一线,日后相见”。看电影而已,没必要伤害村里人的感情。为了抢到好位置,大家只能看到不欢而散的结局。所以我这边看不了,就去别的地方看。复制技术出来后,读取数据不抢占一个库。这台服务器读取请求,正在排队,所以转到另一台服务器。假设网络中有足够多的服务器,总会有一台可以读取数据。SQLServer可以支持8台服务器同时服务读,MySQL可以通过中间件支持更多,比如MySQLProxy、MySQLCat、MySQLDAL等。写到大爆炸时代之前看电影只能是在电影院欣赏,这些电影通常由大型团队制作。那时候,看电影纯粹是一个消费时代。但在4G、5G到来之后,消费时代悄然发生了变化。小团队,甚至个人,开始制作电影。利基视频在长尾效应中获胜。比如Youtube,B站,这个时代,人人都可以创作。有这么多视频,电影制片厂要制作它们已经来不及了。网友的集体创作狂潮,肯定是民间力量,B站,爱奇艺,腾讯视频等等,像你的数据库,经过七八年的发展,受众越来越多,大家的写作热情也越来越高越来越高。这时候,数据库也会面临和视频网站一样的麻烦。如何支持这些“洪流”?经历了大爆炸之后,视频平台纷纷下定决心,将视频服务器分散开来,遍布全国。在全国各大城市,设立视频中心,让身边的视频创作者可以将视频上传到这些服务器。这就是分库分表的模式。华东、华南、西北、中国虽然相互独立,但它们的视频始终是一个逻辑上的整体。一位VLOG作者在北京上传了一段视频。如果他飞到广州,他将无法访问在北京上传的视频,因此说不过去。因此,所有这些视频都保存在一个逻辑表中。根据这些视频上传者的GIS地址,将它们发送到最近的服务器。这是Key值分库分表的常用策略。虽然这样的策略会出现一系列的问题,但我们先了解一下。分库分表的优势非常明显。一是可以容纳更多的数据量,二是访问速度更快。分库分表如何实现?有人说可以用客户端代码来控制对数据库的访问;也有人说我爱写中间件,让服务器自动支持分库分表,而且没有语言限制,也很geek;有人说云原生,程序员负责实现逻辑,运维交给供应商。当然,都可以。但本文仍将重点放在中间件上。毕竟供应商花钱,客户花脑筋。只有中间件才能一劳永逸。分享2个方法:PerconaXtraDBCluster解决方案PerconaXtraDBCluster简称PXC。PerconaXtradbCluster的实现是在原有mysql代码上通过Galera包连接不同的mysql实例,实现多主集群架构。上图中有3个实例组成集群,这3个节点不同于普通的主从架构。它们都可以作为主节点,三个节点是平等的。这通常称为多主机架构。当客户端要写入或读取数据时,连接到任何一个实例都是一样的,读取的数据也是一样的。写入某个节点后,集群本身会将新数据同步到其他节点。这种架构不共享任何数据,是一种高度冗余的架构。作者:罗阿红来源:http://www.cnblogs.com/luoahong/MySQLDAL(DataAccessLayer)是手机之乡高春晖开发的产品。解决了单台电脑容量有限的问题。真正实现了分库分表的优势。DAL有三大组件,JavaNetty框架,ZooKeep控制状态,SQL处理模块(通过分解SQL生成语法树,根据SQL路由表生成对应的执行路径)由于MySQLDAL是闭源产品,没有源码相关实现代码。但是看到这篇论文提到了一些原理:嗯,上次微信群里有水友问数据库开发和数据库开发有什么区别。大概到这里,就可以说清楚了。一类人是开发CRUD应用系统,比如做报表,写ETL;另一类数据库开发是实现数据库的某种功能,如分库分表组件。