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