分库分表

分库分表是随着业务的不断发展,单库单表无法承载整体的数据存储时,采取的一种将整体数据分散存储到不同服务器上的不同数据库中的不同数据表的存储方案。分库分表能够有效的缓解数据的存储压力,分库分表是数据存储达到一定规模时必然会遇到的问题。掌握分库分表的思路和技巧有助于小伙伴们更好的解决实际工作中,有关数据拆分的问题。

接下来,我们就分别对分表和分库来谈谈一些使用的思路和技巧。

分表

分表,最直白的意思,就是将一个表结构分为多个表,然后,可以在同一个库里,也可以放到不同的库。当然,首先要知道什么情况下,才需要分表。个人觉得单表记录条数达到百万到千万级别时就要使用分表了。

分表的分类

1.纵向分表

将本来可以在同一个表的内容,人为划分为多个表。(所谓的本来,是指按照关系型数据库的第三范式要求,是应该在同一个表的。)

分表技巧: 根据数据的活跃度进行分离,(因为不同活跃的数据,处理方式是不同的)

案例:

对于一个博客系统,文章标题,作者,分类,创建时间等,是变化频率慢,查询次数多,而且最好有很好的实时性的数据,我们把它叫做冷数据。而博客的浏览量,回复数等,类似的统计信息,或者别的变化频率比较高的数据,我们把它叫做活跃数据。所以,在进行数据库结构设计的时候,就应该考虑分表,首先是纵向分表的处理。

这样纵向分表后:

(1)首先,存储引擎的使用不同,冷数据使用MyIsam 可以有更好的查询数据。活跃数据,可以使用Innodb ,可以有更好的更新速度。

(2)其次,对冷数据进行更多的从库配置,因为更多的操作是查询,这样来加快查询速度。对热数据,可以相对有更多的主库的横向分表处理。

其实,对于一些特殊的活跃数据,也可以考虑使用memcache ,redis之类的缓存,等累计到一定量再去更新数据库。或者mongodb 一类的nosql 数据库,这里只是举例,就先不说这个。

2.横向分表

字面意思,就可以看出来,是把大的表结构,横向切割为同样结构的不同表,如,用户信息表,user_1,user_2 等。表结构是完全一样,但是,根据某些特定的规则来划分的表,如根据用户ID来取模划分。

分表技巧: 根据数据量的规模来划分,保证单表的容量不会太大,从而来保证单表的查询等处理能力。

案例:

同上面的例子,博客系统。当博客的量达到很大的时候,就应该采取横向分割来降低每个单表的压力,来提升性能。例如博客的冷数据表,假如分为100个表,当同时有100万个用户在浏览时,如果是单表的话,会进行100万次请求,而现在分表后,就可能是每个表进行1万个数据的请求(因为,不可能绝对的平均,只是假设),这样压力就降低了很多。

注意:数据库的复制能解决访问问题,并不能解决大规模的并发写入问题,要解决这个问题就要考虑MySQL数据切分了。

数据切分

顾名思义,就是数据分散,将一台主机上的数据分摊到多台,减轻单台主机的负载压力,有两种切分方式,一种是分库,即按照业务模块分多个库,每个库中的表不一样,还有一种就是分表,按照一定的业务规则或者逻辑将数据拆分到不同的主机上,每个主机上的表是一样的,这个有点类似于Oracle的表分区。

分区

分库又叫垂直分区,这种方式实现起来比较简单,重要的是对业务要细化,分库时候要想清楚各个模块业务之间的交互情况,避免将来写程序时出现过多的跨库读写操作。

分表又叫水平分区,这种方式实现起来就比垂直分区复杂些,但是它能解决垂直分区所不能解决的问题,即单张表的访问及写入很频繁,这时候就可以根据一定的业务规则(PS:如互联网BBS论坛的会员等级概念,根据会员等级来分表)来分表,这样就能减轻单表压力,并且还能解决各个模块的之间的频繁交互问题。

分库的优点是: 实现简单,库与库之间界限分明,便于维护,缺点是不利于频繁跨库操作,不能解决单表数据量大的问题。

分表的优点是: 能解决分库的不足点,但是缺点却恰恰是分库的优点,分表实现起来比较复杂,特别是分表规则的划分,程序的编写,以及后期的数据库拆分移植维护。

实际应用

实际应用中,一般互联网企业的路线都是先分库再分表,两者结合使用,取长补短,这样发挥了MySQL扩展的最大优势,但是缺点是架构很大,很复杂,应用程序的编写也比较复杂。

以上是MySQL的数据切分的一些概念,数据切完了,现在要做的是怎么样在整合起来以便于外界访问,因为程序访问的入口永远只有一个,现在比较常用的解决方案是通过中间代理层来统一管控所有数据源。例如,可以使用冰河深度参与开发的Mycat中间件,也可以使用亮总开源的ShardingSphere中间件。

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

互联网大厂有哪些分库分表的思路和技巧?相关推荐

  1. 数据库 流量切分_互联网大厂有哪些分库分表的思路和技巧?

    写在前面 冰河曾经经历过一个完整电商系统用户从零到上亿的研发过程,在业务的不断发展与变化过程中,演化出电商系统和基于大数据的商品精准实时推荐平台,关于MySQL数据库的架构演进,小伙伴们可以参考< ...

  2. oracle 分表和分区哪个好_互联网大厂有哪些分库分表的思路和技巧?

    点击上方蓝色"冰河技术",关注并选择"设为星标" 持之以恒,贵在坚持,每天进步一点点! 作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架 ...

  3. 【图灵学院02】大型互联网技术之数据库分库分表

    1. 介绍原理 1.1 数据库介绍 Oracle: Oracle很强大,一台还是满足不了现有的一个业务.多台Oracle费用,国美一年给甲骨文500多万. MySQL:免费.广泛(oracle收购) ...

  4. 10亿级订单系统分库分表设计思路

    一.背景 随着公司业务增长,如果每天1000多万笔订单的话,3个月将有约10亿的订单量,之前数据库采用单库单表的形式已经不满足于业务需求,数据库改造迫在眉睫. 二.订单数据如何划分 我们可以将订单数据 ...

  5. 3天,我把MySQL索引、锁、事务、分库分表撸干净了!

    最近项目增加,缺人手,面试不少,但匹配的人少的可怜.跟其他组的面试官聊,他也抱怨了一番,说候选人有点儿花拳绣腿,回答问题不落地,拿面试最常问的MySQL来说,并不只是懂"增删改查" ...

  6. 3天,把MySQL索引、锁、事务、分库分表撸干净了!

    最近项目增加,缺人手,面试不少,但匹配的人少的可怜.跟其他组的面试官聊,他也抱怨了一番,说候选人有点儿花拳绣腿,回答问题不落地,拿面试最常问的MySQL来说,并不只是懂"增删改查" ...

  7. mysql 分表_MySQL如何分库分表

    数据库分库分表估计很多伙伴都没有实践过,就是因为自己公司的业务不是很多,没有那么多数据.假如有一天项目的人数上来了,你写的系统支撑不住了,希望这篇文章带给你一丝丝的思路." 前言 在面试过程 ...

  8. MySQL高性能:索引、锁、事务、分库分表如何撑起亿级数据

    最近项目增加,缺人手,面试不少,但匹配的人少的可怜.跟其他组的面试官聊,他也抱怨了一番,说候选人有点儿花拳绣腿,回答问题不落地,拿面试最常问的MySQL来说,并不只是懂"增删改查" ...

  9. mysql为什么要分库_mysql为什么要分库分表?

    1 基本思想之什么是分库分表? 从字面上简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上. 2 基本思想之为什么要分库分表? 单表操作数据量有最优值 ...

最新文章

  1. 2016-2017 ACM-ICPC Pacific Northwest Regional Contest (Div. 2) 【部分题解】
  2. 随想录(ros学习笔记)
  3. 程序员面试宝典——数据结构之单链表
  4. linux qt 触摸屏事件,利用触摸屏获取事件坐标
  5. ASP.NET Treeview控件中对Checkbox的联级选择
  6. C# WPF 高级教程
  7. 中国集成电路设计产业创新发展的认识和思考
  8. 最厉害的java混淆器_Java-哪个JAVA混淆器好用?
  9. CannotGetJdbcConnectionException:Failed to obtain JDBC Connection
  10. 如何在 R 中找到卡方临界值
  11. 【矩阵论笔记】满秩分解
  12. Java多线程篇--threadlocal和线程池
  13. 密码编码学与网络安全———原理与实践(第八版)第三章笔记
  14. uniapp微信小程序引用标准版交易组件
  15. SVG格式图片的放大
  16. python adb读取手机中短信_python+adb实现自动化获取手机信息
  17. 查询各科成绩最高分、最低分和平均分
  18. [云计算学习3] Linux基础 : 使用chrony搭建时间服务器并让下游NTP同步时间
  19. 事件坐标:screenX,clientX,pageX,offsetX的区别
  20. 平均值不等式证明(数学归纳法)

热门文章

  1. docker初体验:docker部署nginx负载均衡集群
  2. Redis实际应用:限流
  3. Redis Key资源占用情况的可视化分析
  4. 用java实现互换和清空_java使用异或实现变量互换和异或加密解密示例
  5. 详解:操作符的优先级
  6. PTA团体程序设计天梯赛-L2-024 部落
  7. [kuangbin带你飞]专题六-生成最小树
  8. arcgis超级工具密码_忘记电脑密码怎么办?只需要简单这样做
  9. 思科服务器查看生成树协议,CISCO中生成树协议的配置
  10. 有关计算机辅助教学方面的问题,浅析高校计算机辅助教学应用的有关问题