细说MySql中的分表、分库、分片和分区


一、前言

数据库的数据量达到一定程度之后,为避免带来系统性能上的瓶颈。需要进行数据的处理,采用的手段是分区、分片、分库、分表。

二、分片(类似分库)

分片是把数据库横向扩展(Scale Out)到多个物理节点上的一种有效的方式,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。Shard这个词的意思是“碎片”。如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。将整个数据库打碎的过程就叫做分片,可以翻译为分片。

形式上,分片可以简单定义为将大数据库分布到多个物理节点上的一个分区方案。每一个分区包含数据库的某一部分,称为一个片,分区方式可以是任意的,并不局限于传统的水平分区和垂直分区。一个分片可以包含多个表的内容甚至可以包含多个数据库实例中的内容。每个分片被放置在一个数据库服务器上。一个数据库服务器可以处理一个或多个分片的数据。系统中需要有服务器进行查询路由转发,负责将查询转发到包含该查询所访问数据的分片或分片集合节点上去执行。

三、Scale Out/Scale Up 和 垂直切分/水平拆分

Mysql的扩展方案包括Scale Out和Scale Up两种。

Scale Out(横向扩展)是指Application可以在水平方向上扩展。一般对数据中心的应用而言,Scale out指的是当添加更多的机器时,应用仍然可以很好的利用这些机器的资源来提升自己的效率从而达到很好的扩展性。

Scale Up(纵向扩展)是指Application可以在垂直方向上扩展。一般对单台机器而言,Scale Up值得是当某个计算节点(机器)添加更多的CPU Cores,存储设备,使用更大的内存时,应用可以很充分的利用这些资源来提升自己的效率从而达到很好的扩展性。

MySql的Sharding策略包括垂直切分和水平切分两种。

垂直(纵向)拆分:是指按功能模块拆分,以解决表与表之间的io竞争。比如分为订单库、商品库、用户库…这种方式多个数据库之间的表结构不同。

水平(横向)拆分:将同一个表的数据进行分块保存到不同的数据库中,来解决单表中数据量增长出现的压力。这些数据库中的表结构完全相同。

表结构设计垂直切分。常见的一些场景包括

  • 大字段的垂直切分。单独将大字段建在另外的表中,提高基础表的访问性能,原则上在性能关键的应用中应当避免数据库的大字段

  • 按照使用用途垂直切分。例如企业物料属性,可以按照基本属性、销售属性、采购属性、生产制造属性、财务会计属性等用途垂直切分

  • 按照访问频率垂直切分。例如电子商务、Web 2.0系统中,如果用户属性设置非常多,可以将基本、使用频繁的属性和不常用的属性垂直切分开

表结构设计水平切分。常见的一些场景包括

  • 比如在线电子商务网站,订单表数据量过大,按照年度、月度水平切分

  • Web 2.0网站注册用户、在线活跃用户过多,按照用户ID范围等方式,将相关用户以及该用户紧密关联的表做水平切分

  • 例如论坛的置顶帖子,因为涉及到分页问题,每页都需要显示置顶贴,这种情况可以把置顶贴水平切分开来,避免取置顶帖子时从所有帖子的表中读取

四、分表和分区

分表从表面意思说就是把一张表分成多个小表,分区则是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上。

启科网络PHP商城系统 启科网络PHP商城系统

启科网络商城系统由启科网络技术开发团队完全自主开发,使用国内最流行高效的PHP程序语言,并用小巧的MySql作为数据库服务器,并且使用Smarty引擎来分离网站程序与前端设计代码,让建立的网站可以自由制作个性化的页面。 系统使用标签作为数据调用格式,网站前台开发人员只要简单学习系统标签功能和使用方法,将标签设置在制作的HTML模板中进行对网站数据、内容、信息等的调用,即可建设出美观、个性的网站。

启科网络PHP商城系统 0 查看详情 启科网络PHP商城系统

分表和分区的区别

  • 实现方式上

mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表,都对应三个文件(MyISAM引擎:一个.MYD数据文件,.MYI索引文件,.frm表结构文件)。

  • 数据处理上

分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。分区则不存在分表的概念,分区只不过把存放数据的文件分成了许多小块,分区后的表还是一张表,数据处理还是由自己来完成。

  • 提高性能上

分表后,单表的并发能力提高了,磁盘I/O性能也提高了。分区突破了磁盘I/O瓶颈,想提高磁盘的读写能力,来增加mysql性能。

在这一点上,分区和分表的测重点不同,分表重点是存取数据时,如何提高mysql并发能力上;而分区呢,如何突破磁盘的读写能力,从而达到提高mysql性能的目的。

  • 实现的难易度上

分表的方法有很多,用merge来分表,是最简单的一种方式。这种方式和分区难易度差不多,并且对程序代码来说可以做到透明的。如果是用其他分表方式就比分区麻烦了。分区实现是比较简单的,建立分区表,跟建平常的表没什么区别,并且对代码端来说是透明的。

分区的适用场景

  1. 一张表的查询速度已经慢到影响使用的时候。

  2. 表中的数据是分段的

  3. 对数据的操作往往只涉及一部分数据,而不是所有的数据

CREATE TABLE sales (

    id INT AUTO_INCREMENT,

    amount DOUBLE NOT NULL,

    order_day DATETIME NOT NULL,

    PRIMARY KEY(id, order_day)) ENGINE=InnodbPARTITION BY RANGE(YEAR(order_day)) (

    PARTITION p_2010 VALUES LESS THAN (2010),

    PARTITION p_2011 VALUES LESS THAN (2011),

    PARTITION p_2012 VALUES LESS THAN (2012),PARTITION p_catchall VALUES LESS THAN MAXVALUE);

分表的适用场景

  1. 一张表的查询速度已经慢到影响使用的时候。

  2. 当频繁插入或者联合查询时,速度变慢。

分表的实现需要业务结合实现和迁移,较为复杂。

五、分表与分库

分表能够解决单表数据量过大带来的查询效率下降的问题,但是,却无法给数据库的并发处理能力带来质的提升。面对高并发的读写访问,当数据库master服务器无法承载写操作压力时,不管如何扩展sl*e服务器,此时都没有意义了。因此,我们必须换一种思路,对数据库进行拆分,从而提高数据库写入能力,这就是所谓的分库。

与分表策略相似,分库可以采用通过一个关键字取模的方式,来对数据访问进行路由,如下图所示

MySql分表、分库、分片和分区

六、分区与分片区别 原文

MySql分表、分库、分片和分区

推荐学习:《mysql视频教程》

以上就是细说MySql中的分表、分库、分片和分区的详细内容,更多请关注其它相关文章!


# 两种  # 网站优化塔山双喜  # 厚街如何进行网站优化  # 大同网络营销推广服务  # seo淘宝课程  # 福建知名网站建设项目  # 红河蒙自推广营销广告  # seo重点事件  # 北京搜索关键词排名优化孵化  # 线上营销推广模式  # 男装短袖搜索关键词排名  # MySql  # 都是  # 自己的  # 解锁  # 是指  # 很好  # 镜像  # 多个  # 分片  # 切分 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: QQ网页版入口导航 QQ网页版在线访问通道  ExcelSCAN与LAMBDA如何创建自定义移动平均函数_SCAN实现任意窗口期移动平均计算  CDR如何复制交互式填充色  悟空浏览器网页版链接 悟空浏览器网页版最新有效地址  房产|直播|视频号怎么认证开通?|直播|需要什么资质?  Win10怎么设置快速启动 Win10开启快速启动设置方法  Teambition网盘如何共享文件  《七读免费小说》开通会员方法  CSS布局中意外顶部空白的调试与解决:深入理解padding-top  优化长HTML属性值:SonarQube警告与实用策略  智云Q3和Q2有什么升级_智云Q3与Q2手持云台功能与性能对比分析  怎样让Windows 11的开始菜单恢复经典样式_Open-Shell工具使用指南【怀旧】  有道AI翻译入口 智能写作官方网站入口  微信朋友圈怎么设置三天可见 微信朋友圈设置指定天数可见步骤【教程】  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  漫蛙manwa官网浏览入口_漫蛙漫画网页版访问链接  夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】  江苏大剧院会员卡购买步骤  视频号视频怎么免费保存到相册?保存到相册需要注意什么?  如何外贸网站设计-能留住客户提升用户体验!  Python项目中的条件导入:解决跨模块依赖问题  《美篇》取消会员自动续费方法  被称为海蜈蚣的海洋动物是  如何自定义苹果手机铃声  NumPy 高性能技巧:基于多列条件查找最近邻行索引的向量化实现  解决C#跨线程访问XML对象的异常 安全的并发XML处理模式  Git命令与VS Code UI操作的对应关系解析  《狐友》联系客服方法  PHP实现等比数列:构建数组元素基于前一个值递增的方法  铁路12306入口 铁路12306官网版入口登录网址  网页版网易云音乐入口_网易云音乐在线官网登录  qq音乐官方网站入口_qq音乐在线听歌网页版链接  Flexbox布局实践:实现底部页脚与顶部粘性导航条的完美结合  Excel宏怎么删除_Excel中删除宏的详细操作流程  BunnyStream TUS视频上传指南:解决401认证错误与参数配置  mysql导入sql文件能分批导入吗_mysql分批次导入大sql文件的实用技巧  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  向日葵客户端怎么进行语音通话_向日葵客户端语音通话功能使用方法  J*a实现任务清单管理_集合框架综合入门练手  英雄联盟争者留名活动介绍  邮政快递寄件查询入口 邮政快递收件查询入口  AO3中文入口稳定分享_AO3官网HTTPS看文详解  鸿蒙单条备忘录如何加密  Lar*el Dusk 测试中管理浏览器权限:以剪贴板访问为例  如何测试您的网站全球打开速度-网站海外测速工  店铺如何做视频号推广?做视频号推广有用吗?  抖音商城官网是什么_抖音商城官方网址与访问方法  原子笔记app误删找回教程  消除网页顶部意外空白线:CSS布局常见问题与解决方案  《桃源记2》资源采集攻略 

 2021-11-08

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.