作者个人研发在高并发场景下提供了一个简单、稳定、可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能。开源半年多以来,已成功为十几家中小企业提供精准定时调度解决方案,经受住了生产环境的考验。为了造福更多的童鞋,这里给出开源框架的地址:https://github.com/sunshinelyz/mykit-delay写在前面注:本文已收录:https://github.com/sunshinelyz/technology-binghe和https://gitee.com/binghe001/technology-binghe分库分表分库分表是在单库单表无法承载整体的情况下,分散整体数据的一种方法数据存储随着业务的不断发展,将不同的数据表存储在不同服务器上的不同数据库中。分库分表可以有效缓解数据存储压力。当数据存储达到一定规模时,分库分表是不可避免的问题。掌握分库分表的思路和技巧,将有助于你在实际工作中更好地解决数据拆分相关的问题。接下来说一下分表分库的一些思路和技巧。表分表,最直接的意思,就是把一个表结构分成多个表,然后它们可以放在同一个库中,也可以放在不同的库中。当然,首先要知道什么情况下需要分表。个人认为,当单表的记录数达到百万到千万条时,就应该使用分表。分表的分类1、垂直分表人为地将本可以在同一个表中的内容划分到多个表中。(所谓原始是指按照关系型数据库第三范式的要求,应该在同一张表中)处理方式不同)案例:对于一个博客系统,文章标题、作者、分类、创建时间等,变化频率慢,查询量大,最好有很好的实时数据,我们称之为冷数据。至于博客浏览量、回复数等类似的统计信息,或者其他变化频率比较高的数据,我们称之为活跃数据。因此,在设计数据库结构时,应该考虑分表,首先是垂直分表的处理。这样垂直划分表后:(1)首先,存储引擎的使用不同,MyIsam对于冷数据可以有更好的查询数据。活跃数据,可以使用Innodb,可以有更好的更新速度。(2)其次,为冷数据配置更多的从库,因为更多的操作是查询,这样可以加快查询速度。对于热点数据,主库的横向分表处理相对较多。其实对于一些特殊的活跃数据,也可以考虑使用memcache、redis等缓存,积累到一定量后再更新数据库。或者像mongodb这样的nosql数据库,这里只是举个例子,先不说这个。2.水平分表的字面意思可见,就是把大表结构水平的分成相同结构的不同表,比如用户信息表,user_1,user_2等,表结构完全一样,但是这个表是按照一些特定的规则划分的,比如按照用户ID取模划分。分表技巧:根据数据量的大小进行分表,保证单表的容量不会太大,从而保证单表的处理能力,比如查询。案例:同上例,博客系统。当博客的体量达到很大的时候,就应该采用水平切分的方式来降低各个单表的压力,提高性能。比如一个博客的冷数据表,分成100张表,当100万用户同时浏览时,如果是单表,就会有100万次请求,现在分表后,可能是每张表Requests10000条数据(因为不可能做绝对的平均,只是假设),这样压力就减轻了很多。注意:数据库复制可以解决访问问题,但不能解决大规模并发写入问题。要解决这个问题,必须要考虑MySQL的数据切分。数据切分,顾名思义就是将数据进行分布式处理,将一台主机上的数据分布到多台机器上,以减轻单台主机的负载压力。切分有两种方式,一种是分库,即按业务模块划分多个数据库,每个库中的表不一样,还有一种分表,将数据按照业务模块拆分到不同的主机中某些业务规则或逻辑。每个主机上的表都是一样的,有点类似于Oracle。表分区。分区、分库也叫垂直分区。这种方法实现起来比较简单。完善业务很重要。分库的时候一定要清楚各个模块的业务之间的交互,以免以后写程序的时候交叉太多。库读写操作。表分区也称为水平分区。这种方式实现起来比垂直分区要复杂一些,但是可以解决垂直分区无法解决的问题,即单表的访问和写入非常频繁。业务规则(PS:比如互联网BBS论坛的会员级别概念,按照会员级别划分表)来分表,这样可以减轻单表的压力,同时解决频繁出现的问题也可以解决各个模块之间的交互。分库的优点是:实现简单,库与库之间界限清晰,易于维护。缺点是不利于频繁的跨库操作,不能解决单表数据量大的问题。分表的优点是:可以解决分库的缺点,而缺点恰恰是分库的优点。分表的实现比较复杂,尤其是表分规则的划分,程序的编写,以及后期的分库和移植维护。实际应用在实际应用中,一般互联网企业的路线是先分库再分表。两者结合使用,取长补短。这样就发挥了MySQL扩展的最大优势,缺点是结构非常庞大复杂,应用程序的编写也比较复杂。以上是MySQL数据切分的一些概念。数据切分之后,现在要做的就是如何整合,方便外部访问,因为程序访问的入口永远只有一个。现在比较常见的方案是通过中间代理层来统一控制所有的数据源。比如可以使用冰河深度参与开发的Mycat中间件,或者亮宗开源的ShardingSphere中间件。本文转载自微信公众号“冰河科技”,可通过以下二维码关注。转载本文请联系冰川科技公众号。
