MySQL篇之分库分表

一、为什么要分库分表

1.目的

        1. 分担了访问压力    2. 解决存储压力

2.分库分表的时机

        1. 前提,项目业务数据逐渐增多,或业务发展迅速,单表的数据量达1000W或20G以后。

        2. 优化已解决不了性能问题(主从读写分离、查询索引…)。

        3. IO瓶颈(磁盘IO、网络IO)、CPU瓶颈(聚合查询、连接数太多)。

二、拆分策略

1.垂直拆分

(1)垂直分库

        垂直分库:以表为依据,根据业务将不同表拆分到不同库中。

        特点: 1. 按业务对数据分级管理、维护、监控、扩展。

                    2. 在高并发下,提高磁盘IO和数据量连接数。

(2)垂直分表

        垂直分表:以字段为依据,根据字段属性将不同字段拆分到不同表中。

        特点: 1. 冷热数据分离。

                    2. 减少IO过渡争抢,两表互不影响。

        拆分规则: 把不常用的字段单独放在一张表。

                           把text,blob等大字段拆分出来放在附表中。

2.水平拆分

(1)水平分库

        水平分库:将一个库的数据拆分到多个库中。

        特点: 1. 解决了单库大数量,高并发的性能瓶颈问题。

                    2. 提高了系统的稳定性和可用性。

(2)水平分表

        水平分表:将一个表的数据拆分到多个表中(可以在同一个库内)。

         特点: 1. 优化单一表数据量过大而产生的性能问题。

                     2. 避免IO争抢并减少锁表的几率。

三、产生的问题以及如何解决

        分库之后的问题:

                1. 分布式事务一致性问题。

                2. 跨节点关联查询。

                3. 跨节点分页、排序函数。

                4. 主键避重。

        解决方案:

                分库分表中间件:

                1. sharding-sphere。

                2. mycat。

四、面试的回答

面试官:你们项目用过MySQL的分库分表吗?

候选人:因为我们都是微服务开发,每个微服务对应了一个数据库,是根据业务进行拆分的,这个其实就是垂直拆分。

面试官:那你之前使用过水平分库吗?

候选人:这个是使用过的,我们当时的业务是(xxx),一开始,我们也是单库,后来这个业务逐渐发展,业务量上来的很迅速,其中(xx)表已经存放了超过1000万的数据,我们做了很多优化也不好使,性能依然很慢,所以当时就使用了水平分库。

我们一开始先做了3台服务器对应了3个数据库,由于库多了,需要分片,我们当时采用的mycat来作为数据库的中间件。数据都是按照id(自增)取模的方式来存取的。

当然开始的时候,那些旧数据,我们做了一些清洗的工作,我们也是按照id取模规则分别存储到了各个数据库中,好处就是可以让各个数据库分摊存储和读取的压力,解决了我们当时性能的问题。

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

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

相关文章

nrm 镜像源管理工具

1、什么是nrm nrm(npm registry manager )是npm的镜像源管理工具。它可以快速在让你在本地源之间切换。 2、安装 npm install -g nrm 3、查看本地源(nrm ls) 4、切换 (nrm use ***) 5 、测试速度(nrm test ***&…

vue3实现瀑布流布局组件

先看效果图 直接上代码 utils.js // 用于模拟接口请求 export const getRemoteData (data 获取数据, time 2000) > {return new Promise((resolve) > {setTimeout(() > {console.log(模拟获取接口数据, data)resolve(data)}, time)}) }// 获取数组随机项 export…

【高阶数据结构】B+树

文章目录 1. B树的概念2. B树的查找3. B-树 VS B树4. B 树的插入分析 1. B树的概念 B树是B树的变形,是在B树基础上优化的多路平衡搜索树,B树的规则跟B树基本类似,但是又在B树的基础上做了一些改进优化。 一棵m阶的B树需满足下列条件&#x…

推荐一个内网穿透工具,支持Windows桌面、Linux、Arm平台客户端

神卓互联是一款常用的内网穿透工具,它可以将本地服务器映射到公网上,并提供域名或子域名给外部访问。神卓互联具有简单易用、高速稳定的特点,支持Windows桌面版、Linux版、Arm版客户端,以及硬件等。 神卓互联内网穿透技术简介 企…

HarmonyOS开发篇—数据管理(分布式数据服务)

分布式数据服务概述 分布式数据服务(Distributed Data Service,DDS) 为应用程序提供不同设备间数据库数据分布式的能力。通过调用分布式数据接口,应用程序将数据保存到分布式数据库中。通过结合帐号、应用和数据库三元组&#xf…

【力扣 - 二叉树的最大深度】

题目描述 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 提示&#xff1a; 树中节点的数量在 [0, 10^4] 区间内。 -100 < Node.val < 100方法一&#xff1a;深度优先搜索 思路与算法 如…

杨氏矩阵和杨辉三角

杨氏矩阵 有一个数字矩阵&#xff0c;矩阵的每行从左到右是递增的&#xff0c;矩阵从上到下是递增的&#xff0c;请编写程序在这样的矩阵中查找某个数字是否存在。 要求&#xff1a;时间复杂度小于O(N); 分析 若要满足要求时间复杂度小于O(N)&#xff0c;就不能每一行一个个…

7款自媒体人ai写作必备的免费工具,快速高效运营 #AI写作#知识分享#知识分享

在当今信息爆炸的时代&#xff0c;写作成为了人们表达思想、分享知识和传递情感的重要方式之一。对于很多人来说&#xff0c;写作并非易事。我们会陷入困境&#xff0c;无法找到灵感&#xff0c;我们会苦恼于语言表达的准确性&#xff0c;还有时候我们可能遭遇到了创作瓶颈&…

Cesium for Unreal 从源码编译到应用——创建三维地球

一、基础环境 Unreal Engine 5.3 编译好的CesiumForUnreal插件 Cesium ion 账号 二、创建新工程 启动Unreal Engine&#xff0c;选择游戏->空白模板&#xff0c;输入项目名称。 打开内容浏览器&#xff0c;在内容文件夹中新建Maps文件夹&#xff0c;然后在里面添加新的…

Android 沉浸式状态栏

过时的API //设置默认隐藏虚拟按键&#xff0c;虚拟按键显示后为半透明protected open fun hideNavigationBarAndFullScreen() {val flags: Int// This work only for android 4.4flags if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT) {// This work only for a…

天洑AIFEM软件将助力竞技机器人国际冠军战队再攀高峰

2023年底&#xff0c;烈鹏战队作为中国顶尖机器人队伍代表出征国际赛事Battle of Robots&#xff0c;经过与全球战队激烈竞争&#xff0c;取得国际赛场上5连胜的优秀战绩斩获国际冠军。 天洑智能结构仿真软件AIFEM与玄智科技的技术方案联合&#xff0c;基于烈鹏战队的冠军机器人…

网站常见的反爬手段及反反爬思路

摘要:介绍常见的反爬手段和反反爬思路&#xff0c;内容详细具体&#xff0c;明晰解释每一步&#xff0c;非常适合小白和初学者学习&#xff01;&#xff01;&#xff01; 目录 一、明确几个概念 二、常见的反爬手段及反反爬思路 1、检测user-agent 2、ip 访问频率的限制 …