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

写在前面

冰河曾经经历过一个完整电商系统用户从零到上亿的研发过程,在业务的不断发展与变化过程中,演化出电商系统和基于大数据的商品精准实时推荐平台,关于MySQL数据库的架构演进,小伙伴们可以参考《从零到千万用户,我是如何一步步优化MySQL数据库的?》,关于系统的架构演进,小伙伴们可以参考《系统从初期到支撑亿级流量,都经历了哪些架构上的演变?》。在系统的研发过程中,随着数据量的不断增长,单库单表已无法满足数据的存储需求,此时,我们就需要对数据库进行分库分表操作。那在互联网大厂,分库分表通常有哪些思路和技巧呢?今天,我就将这些思路和技巧分享给大家。

分库分表

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

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

分表

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

分表的分类

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中间件。

好了,今天就到这儿吧,我是冰河,我们下期见~~

写在最后

如果小伙伴们觉得我写的不错,可以加我微信:sun_shine_lyz,我拉你进技术交流群哦,这里有很多技术大牛每天分享自己的技术干货哦~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

feign和ajax,SpringCloud-feign 声明式服务调用

以前学习java,一般就一个后端,都要学习如何在容器中运行,如tomcat,weblogic,现在微服务颠覆了这一切,一个系统要被拆分成多个服务,服务与服务间需要通信,让我想到了前端的ajax&#…

WebService学习笔记---CXF入门

2019独角兽企业重金招聘Python工程师标准>>> 一、准备 软件环境&#xff1a; JDK1.8, Eclipse JEE 4.4, Maven-3.2.5, Spring-4, CXF-3.1.5 二、创建项目 新建一个Maven项目&#xff0c;在pom.xml里添加spring依赖<dependencyManagement><dependencies>…

提供程序未返回 ProviderManifestToken 字符串

我这是在学习MVC3.0时出现的错误&#xff0c;其实呢这个问题主要是因为web.config配置文件访问数据库的时候连接出错造成的 <connectionStrings> <add name"ApplicationServices" connectionString"data source.\SQLEXPRESS;Integrated Sec…

.NET 6新特性试用 | ArgumentNullException卫语句

前言在前面的文章中&#xff08;《可空引用类型》&#xff09;&#xff0c;我们介绍过编译器会帮我们检查空引用&#xff0c;但是仅仅是警告。最好的方式还是在运行时用卫语句进行检查&#xff1a;private void Test(WeatherForecast weatherForecast) {if (weatherForecast n…

JSP之EL表达式详细介绍

一、JSP EL语言定义 E L&#xff08;Expression Language&#xff09; 目的&#xff1a;为了使 JSP写起来更加简单。 表达式语言的灵感来自于 ECMAScript 和 XPath 表达式语言&#xff0c;它提供了在 JSP 中简化表达式的方法。它是一种简单的语言&#xff0c;基于可用的命名空…

那一年,爱因斯坦输得很惨很惨,被十几个诺奖得主怼了一遍后,退出了群聊……...

全世界只有3.14 % 的人关注了爆炸吧知识科学家撕逼原来这么刺激“遇事不决&#xff0c;量子力学”&#xff0c;作为长期在民间被调侃的学科&#xff0c;量子力学的名声不小&#xff0c;但它究竟有多重要&#xff0c;又是怎么来的&#xff0c;却少有人了解。而说到量子力学&…

带有帐号密码验证的apche服务器文件下载

2019独角兽企业重金招聘Python工程师标准>>> 使用python访问 #!/usr/bin/python #fileencoding:utf-8def testUrl():import urllib2import sysimport reimport base64from urlparse import urlparse#下载路径theurl http://ip/release/LHJH/Server/er_service.waru…

00截断上传绕过_小谈截断上传漏洞

0x00 前言小菜今天在测试网站的时候&#xff0c;发现存在上传点&#xff0c;于是尝试各种姿势&#xff0c;环境为iis7.5&#xff0c;于是乎来一个解析漏洞&#xff0c;发现并不可以&#xff0c;最终百度乎&#xff0c;发现上传有很多种利用方法&#xff0c;所以小菜就去学习了一…

使用keytool查看Android APK签名

文章目录 一、找到JDK位置二、使用方法2.1 打开windows命令行工具2.2 查看签名 三、如何给APK做系统签名呢? 一、找到JDK位置 安卓AS之后&#xff0c;可选择继续安装JDK&#xff0c;如本文使用amazon版本默认位置&#xff1a;C:\Users\66176.jdks\corretto-1.8.0_342可通过自…

exchange服务器维护模式命令,Exchange服务器系列课程之七--维护邮件服务器(二)

继续上次的讨论&#xff0c;上次讨论了邮件服务器的一些监控和排错手段&#xff0c;今天我们继续来讨论邮件服务器的维护。今天主要来讨论一下邮件服务器的备份与还原。为什么要备份我就不多说了&#xff0c;备份的方法也非常简单&#xff0c;通过备份工具直接备份就可以了。这…

任务管理器在右下角的图标不显示

任务管理器在右下角的图标不显示 2012年11月7日18:22:23 症状如下图所示&#xff0c;不管是打开任务管理器还是最小化它&#xff0c;右下角均没有它的图标。 网上查到的说法均不靠谱。后来我CtrlAltDel调出任务管理器&#xff0c;找到任务管理器对应进程“taskmgr.exe”&#x…

总结 一下UML 类图的关系

1&#xff0c;实线三角 表示 泛化 是一种继承关系,它指定了子类如何特化父类的所有特征和行为 2&#xff0c;虚线三角 表示 实现 是一种类与接口的关系&#xff0c;表示类是接口所有特征和行为的实现 3&#xff0c;空心菱形 表示 聚合 是整体与部分的关系 4&#xff0c; 实心…

MAUI中构建跨平台原生控件实现

简介MAUI中使用Handler体系来处理不同平台的原生控件实现, 即对应的, 如果我们想要创建控件, 只需要创建基于不同平台的Handler即可。那么下面主要教大家如何通过创建Handler(事件处理程序)来构建自己的控件。开始下面, 将通过创建一个进度条控件案例, 来演示如何在MAUI项目中创…

Android之android studio如何获取证书指纹 (SHA1)

android studio如何获取证书指纹 (SHA1) 为什么要用SHA1 我们做百度地图或是高德地图的时候。注册app信息要求填写数字签名 我们可以通过外部命令行获取&#xff0c;也可以通过eclipse获取 &#xff0c;现在主流是android studio下面是通过Android studio获取的方法 第一步&am…

排位重要还是媳妇儿重要?

1 刚打到的车&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 还是排位要紧&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 大叔为求省事在家自行焚烧床垫▼4 好家伙&#xff0c;这回答直呼&#xff1a;想不到吧&#xff01;&#xff08;素材来源网络&…

新天龙八部服务器维护了吗,《新天龙八部》3月11日全服更新维护公告

亲爱的玩家&#xff0c;大家好&#xff1a;为保证游戏运行的稳定性&#xff0c;提升整体服务质量&#xff0c;《新天龙八部》游戏全部服务器(除测试服务器外)将于2021年3月11日7&#xff1a;00—9&#xff1a;00进行更新维护&#xff0c;维护后版本号升级为3.67.9108。如果在预…

锁屏快捷键_全面屏 iPhone 锁屏快捷键美化,让你的 iPhone 更特别

苹果从iPhone X以后的手机都是全面屏(即刘海屏)&#xff0c;在你的全面屏手机锁屏状态在&#xff0c;屏幕下方有两个快捷按钮&#xff0c;左边的是「手电筒」&#xff0c;右边的是「相机」&#xff0c;在锁屏状态下这两个功能是圆形的&#xff0c;今天堂堂分享一个无需越狱即可…

URLEncode编码和URLDecode解码

1 String text1 java.net.URLEncoder.encode("中国" ,"utf-8" ); 2 String text2 java.net.URLDecoder.decode(text1,"utf-8"); (1).URLEncoder需要注意&#xff1a;这个方法编码了符号&#xff0c;“\” ,“&”,“”,和“&#xff1…

MAUI 移植 Xamarin.Forms 自定义渲染器

简介众所周知, .NET MAUI使用的是Handler处理程序, 而Xamarin使用的则是Render渲染器模式。尽管MAUI中使用了新的渲染模式, 但是仍然Xamarin中的支持Render渲染器, 这意味着如果你的项目是从Xamarin移植到MAUI当中, 大部分代码能够可以重用, 本篇文章介绍如何将Xamarin 渲染器(…

当下流行的分布式文件系统大阅兵

本文对目前数种分布式文件系统进行简单的介绍。当前比较流行的分布式文件系统包括&#xff1a;Lustre、Hadoop、MogileFS、FreeNAS、FastDFS、NFS、OpenAFS、MooseFS、pNFS、以及GoogleFS。Lustre&#xff08;www.lustre.org&#xff09;lustre是一个大规模的、安全可靠的&…