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.mzph.cn/news/691219.shtml

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

相关文章

Python | Conda常用命令

一、介绍 1、Anaconda工具 Anaconda是一个用于数据科学和机器学习的开源软件包管理器和环境管理器。它包含了许多流行的数据科学工具和库,如Python、Jupyter Notebook、numpy、pandas、scikit-learn等,可以帮助用户轻松地管理和安装这些工具和库。Anaco…

数据库管理-第152期 Oracle Vector DB AI-04(20240220)

数据库管理152期 2024-02-20 数据库管理-第152期 Oracle Vector DB & AI-04(20240220)1 常用的向量检索方法聚类图搜索哈希量化 2 Oracle Vector DB中的索引索引(默认) 索引(高级)3 EMBEDDINGSSQL EMBE…

masscan使用

masscan简介: masscan 是一种快速的端口扫描工具,旨在快速扫描大量IP地址和端口。masscan的发包速度非常快,在windows中,它的发包速度可以达到每秒30万包;在Linux中,速度可以达到每秒160万。masscan在扫描时会随机选择…

阿里云备案服务器买哪种?多少钱?有什么限制条件?

在阿里云备案服务器需要多少钱?目前符合备案条件的阿里云服务器只要30元,并且这台云服务器可以备案5个网站。2核4G配置,价格为30元3个月,也可以选择2核2G轻量服务器,61元一年,阿里云老用户还可以选择99元一…

通俗易懂地理解稀疏性

今天我想与大家探讨的是一个数学和工程学中的重要概念——稀疏性。这个概念可能听起来很抽象,但它实际上贯穿于我们生活中的许多方面。那么,稀疏性到底是什么呢?简单来说,在数学和信号处理领域,一个信号被称为稀疏&…

vue小记——this

原生和Vue中使用this的这几个坑你都知道吗? - 掘金 (juejin.cn) 在JavaScript中,this是一个特殊的关键字,它在函数被调用时自动定义。this的值在函数被调用时决定,取决于调用的上下文(context)&#xff0c…

Eclipse - Text Editors (文本编辑器)

Eclipse - Text Editors [文本编辑器] References Window -> Preferences -> General -> Editors -> Text Editors Displayed tab witdth: 4 勾选 Insert spaces for tabs 勾选 Show line number References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.n…

力扣(LeetCode)数据结构练习题(2)

今天又写了两道关于链表的练习题,来给大家分享一下。巩固一下上一篇学到的链表知识,题目可以然我们更清楚的认识链表。 目录 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表 给你单链表的头结点 head ,请…

ADO.NET事务处理

在ADO.NET中,事务是一组一起执行的数据库操作,这些操作要么全部成功,要么全部失败。这确保了数据库的一致性和完整性。ADO.NET提供了SqlTransaction类来支持事务处理。 以下是一个使用C#和ADO.NET进行事务处理的示例: csharp代码…

小红书数据分析:sora爆火,为内容行业带来哪些变化

导语 春节还没过完,科技圈就出“大事”了~据悉,OpenAI发布了Sora,一种由文字生成视频的AI工具,且效果极其逼真,打破了多项纪录。Sora的出现,又让人类里通用人工智能AGI近了一步。那么。Sora的出现对于小红…

外贸人做外贸听话要听音

有人说,在做外贸的时候大部分的人都是充当着客服的角色,而且遵循的模式也是一问一答,凡是客户提出的问题,我们都会尽可能详细的回答。 但是对于如何提问客户,却是不知道怎么下手, 于是,在这样的…

从零开始手写mmo游戏从框架到爆炸(十七)— 完善后端报错与客户端显示

导航:从零开始手写mmo游戏从框架到爆炸(零)—— 导航-CSDN博客 我们在前后端交互的请求体的父类中再增加三个字段,分别是失败跳转topic,失败跳转tag,失败原因。 eternity-common - RequestBase.java pac…

hive load data未正确读取到日期

1.源数据CSV文件日期字段值: 2.hive DDL语句: CREATE EXTERNAL TABLE test.textfile_table1(id int COMMENT ????, name string COMMENT ??, gender string COMMENT ??, birthday date COMMENT ????,.......) ROW FORMAT SERDE org.apache.…

wordpress企业网站模板免费

绿色风格的wordpress免费模板,经测试可以免费下载的WP模板。 https://www.wpniu.com/themes/300.html 简洁大气的文化艺术类wordpress模板,可以免费下载,实用易上手,新手也适合。 https://www.wpniu.com/themes/304.html 高端大…

Spring Security对接OIDC(OAuth2)外部认证

前后端分离项目对接OIDC(OAuth2)外部认证,认证服务器可以使用Keycloak。 后端已有用户管理和权限管理,需要外部认证服务器的用户名和业务系统的用户名一致才可以登录。 后台基于Spring Boot 2.7 Spring Security 流程: 前台浏览器跳转到…

C++面试宝典第30题:分发饼干

题目 假设你是一位非常棒的家长,想要给你的孩子们分发一些小饼干。但是,每个孩子最多只能给一块饼干。对每一个孩子i,都有一个胃口值gi,这是能让孩子们满足胃口的饼干的最小尺寸。对每一块饼干j,都有一个尺寸sj。如果sj >= gi,我们就可以将这个饼干j分配给孩子i,这个…

golangci-lint如何关闭typecheck

https://github.com/golangci/golangci-lint/issues/2912 typecheck是go源码的校验,无法通过.golangci.yml配置关闭 可以直接在golangci-lint源码层面关闭typecheck

Springboot AOP开发

Springboot AOP开发 一 AOP概述 AOP,即面向切面编程,简言之,面向方法编程。 针对方法,在方法的执行前或执行后使用,用于增强方法,或拓展。 二 AOP开发 1.引入 spring-boot-starter-aop 在SpringBoot项…

AWS Elastic Beanstalk通过应用负载均衡配置https

接上一篇,今天说说怎么通过AWS Elastic Beanstalk提供的应用负载均衡配置https。 首先创建应用和环境,这里应用可以使用上一篇文章中使用的demo应用(只需要package.json和app.js文件) 创建环境的时候,确认下面两个参…

【高效开发工具系列】PyCharm使用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…