如何应对MySQL单表数据量过大:垂直分表与水平分表策略解析

话接上回,单表最大数据建议两千万,那如果开发一个项目,预计注册量达到一个亿怎么办。

单表内放这么多数据,MYSQL底层B+树的层级结构就可能会变得很高,磁盘io次数变多,性能会大幅度降低。所以考虑数据库分表。

这里的分表分为垂直分表和水平分表两种。

垂直分表:

原理比较简单,一般就是把某几列拆成一个新表,这样原来的表就小了,拆几列出去,那数据表里的每行数据就会变少,单个16K数据页就能放入越多的行数,这样发生查询时需要的数据页就会越少,那磁盘IO也会越少,所以性能就会越快。

水平分表:

水平分表有好几种做法,但不管是哪种,本质上都是将原来的user表变成USER0到user_n这样的N张小,每一张小表里只保存了一部分数据,一般是500万到2000万。

第一种:根据ID取模分表

假设我们一共分了两张表,分别是user_0和user_1,此时模等于2,我们将输入的ID与模进行求余数操,如ID=2,4,6的时候,会被写到user_0这张表。ID=1,3,5和2取模得到1,于是就能知道应该写到user_1这张表里。

优点:

        比较简单

        读写数据都可以很均匀的分摊到每个分表上

缺点:如果想要扩展表的个数,比如从两张表变成3张表,那同样还是ID=3的数据,以前3和2取模得到1,所以ID=3的数据会放在USER1表里,现在3和3取模得到0,那就要放在USER0这张表里,跟原来的USER1就对不上了,这就需要考虑数据迁移

第二种:根据ID范围分表

假设我们每张分表都能存放500万条数据,那user_0就存放ID为1~500万的数,user_1就存放ID在500万到1000万之间的数据。假设现在有条数据,ID=3000万要读写条数据,就需要将3000万除以500万得到6,那就可以知道这条数据属于user_6一表,于是就去读写user_6表就行了。

优点:根据ID范围去分表就能很好的解决ID取模时数据表的扩展问题。

缺点:假设新注册玩家的ID是不断加一的,那么在某段时间内,ID会集中在某个分片范围内,比如在4000万到6000万的范围,数据会不断写入这个特定的分表中,并没有起到分摊数据读写压力的效果,这就是所谓的读写热点问题。解决读写热点问题最简单的方案就是让ID变得随机,这样ID就能随机分散到所有表上,分摊读写压力。

 推荐一位优秀的up主:小白debug的个人空间-小白debug个人主页-哔哩哔哩视频 (bilibili.com)

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

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

相关文章

Contained连接Harbor仓库,报错failed to call tryLoginWithRegHost

1、Harbor镜像仓库地址:192.168.0.190 2、Contained地址:192.168.0.179(k8s集群master节点) 3、创建目录/etc/containerd/certs.d/镜像仓库Harbor ip mkdir -p /etc/containerd/certs.d/192.168.0.190 4、进人上面目录&#xff0…

mybatis-puls 条件分析插件

一,能做什么 我们在平时的开发中,会遇到一些慢sql. MP也提供了性能分析插件,如果超过这个时间就停止运行! 二,如何实现 2.1引入条件分析插件 //性能分析BeanProfile({"dev","test"}) //设置dev 和 test环境开启public Performanc…

牛客周赛 Round 39(A,B,C,D,E,F,G)

比赛链接 官方题解(视频) B题是个贪心。CD用同余最短路,预处理的完全背包,多重背包都能做,比较典型。E是个诈骗,暴力就完事了。F是个线段树。G是个分类大讨论,出题人钦定的本年度最佳最粪 题目…

《自动机理论、语言和计算导论》阅读笔记:p172-p224

《自动机理论、语言和计算导论》学习第 8 天,p172-p224总结,总计 53 页。 一、技术总结 1.Context-Free Grammar(CFG) 2.parse tree (1)定义 p183,But perhaps more importantly, the tree, known as a “parse tree”, when used in a …

用二进制译码器实现组合逻辑函数

用二进制译码器实现组合逻辑函数 原理 由于 n n n 位二进制译码器可提供 2 n 2^n 2n 个最小项的输出,而任一个逻辑函数都可变换为最小项之和的标准与或式,因此利用译码器和门电路可实现单输出及多输出组合逻辑电路 基本步骤 选择合适的集成二进制译…

使用Scrapy选择器提取豆瓣电影信息,并用正则表达式从介绍详情中获取指定信息

本文同步更新于博主个人博客:blog.buzzchat.top 一、Scrapy框架 1. 介绍 在当今数字化的时代,数据是一种宝贵的资源,而网络爬虫(Web Scraping)则是获取网络数据的重要工具之一。而在 Python 生态系统中,S…

社交媒体数据恢复:Viber

Viber是一款流行的即时通讯应用,用于发送消息、语音通话和视频通话。然而,有时候我们会不小心删除一些重要的Viber聊天记录,这时候就需要进行数据恢复。本文将介绍如何在安卓设备上进行Viber数据恢复。 一、使用安卓数据恢复软件 安卓数据恢…

排序算法之选择排序

目录 一、简介二、代码实现三、应用场景 一、简介 算法平均时间复杂度最好时间复杂度最坏时间复杂度空间复杂度排序方式稳定性选择排序O(n^2 )O(n^2)O(n^2)O(1)In-place不稳定 稳定:如果A原本在B前面,而AB,排序之后A仍然在B的前面&#xff1…

jdk和Eclipse软件安装与配置(保姆级别教程)

目录 1、jdk的下载、安装、配置 1.1 jdk安装包的的下载地址:Java Archive | Oracle ,点击进入,然后找到你想要的版本下载,如下图: 2.1 开始下载,如下图: 3.1 登入Oracle账号就可以立即下载了…

【Java框架】Spring框架(二)——Spring基本核心(AOP)

目录 面向切面编程AOPAOP的目标:让我们可以“专心做事”专心做事专心做事解决方案1.0专心做事解决方案2.0蓝图 AOP应用场景AOP原理AOP相关术语术语理解 AOP案例实现前置/后置/异常/最终增强的配置实现1.依赖2.业务类3.日志类4.配置切入点表达式匹配规则举例 环绕增强…

车内AR互动娱乐解决方案,打造沉浸式智能座舱体验

美摄科技凭借其卓越的创新能力,为企业带来了革命性的车内AR互动娱乐解决方案。该方案凭借自研的AI检测和渲染引擎,打造出逼真的数字形象,不仅丰富了车机娱乐内容,更提升了乘客与车辆的互动体验,让每一次出行都成为一场…

若依安装过程

文章目录 参考博客环境准备下载redisjdk1.8下载nacos 后端mysqlnacos运行npm 参考博客 https://blog.csdn.net/qq_31536117/article/details/134603862 环境准备 下载redis 参考https://redis.com.cn/redis-installation.html jdk1.8下载 参考 https://zhuanlan.zhihu.co…

海外仓管理软件必要性分析:大幅度降本增效,精细化运营才是出路

随着全球化大趋势的推进和电商平台技术的高速发展,跨境电商的规模体量正在不断扩大。作为链接卖家和买家的桥梁,海外仓的重要程度自然是不用质疑。 在如此大的需求面前,本来应该是前景一片大好。但是事实似乎并没有这么乐观,随着…

电子元器件线上交易商城搭建的价值和必要性-加速度jsudo

随着科技的飞速发展,电子元器件行业正迎来前所未有的变革。为了满足市场对于电子元器件采购的便捷性、高效性和多样性的需求,电子元器件商城的开发显得尤为重要。本文将探讨电子元器件商城开发的重要性、主要功能以及它如何助力行业发展。 电子元器件商城…

研究生,该学单片机还是plc。?

PLC门槛相对较低,但是在深入学习和应用时,仍然有很高的技术要求。我这里有一套单片机入门教程,不仅包含了详细的视频 讲解,项目实战。如果你渴望学习单片机,不妨点个关注,给个评论222,私信22&am…

Nginx小册(博客笔记迁移)

nginx基础 1.常用命令 nginx -v #查看版本 ps -ef | grep nginx #输出linux进程、 nginx #启动nginx进程 nginx -s reload #重载配置 nginx -s stop # 停止进程 nginx -t # 检查是否有语法错误,以及配置文件地址2.nginx的配置文件 # 用户组的设置 windows上不生…

ES6: set和map数据结构以及使用场景

ES6:set和map数据结构 一、Set 数据结构:二、使用场景:使用Set 进行去重三、Map 数据结构四、使用场景:使用Map进行树型数据懒加载刷新五、Set和Map的区别六、Map、Set的实际使用场景 Set 和 Map 是 ES6 中引入的两种新的数据结构&#xff0c…

FlexLua低代码技术,十分钟搞定4G转LoRa网关设备

在当今物联网时代,无线通信技术的发展日新月异,4G和LoRa作为两种不同的通信技术,各自拥有独特的优势和应用场景。而4G转LoRa网关设备的出现,则将这两种技术有效地结合起来,为物联网应用提供了更多可能性。 4G转LoRa网关…

【自媒体创作利器】AI白日梦+ChatGPT 三分钟生成爆款短视频

AI白日梦https://brmgo.com/signup?codey5no6idev 引言 随着人工智能(AI)技术的快速发展,AI在各个领域都展现出了强大的应用潜力。其中,自然语言处理技术的进步使得智能对话系统得以实现,而ChatGPT作为其中的代表之一…

Bytebase 2.15.0 - GitOps 整体升级

🔔 GitOps 整体升级 新版 GitOps 和之前版本不兼容,如果需要升级协助,请联系我们。 使用访问令牌进行身份验证。支持项目中配置多个 VCS 连接器。支持在 VCS 连接器中指定数据库分组为目标(默认情况下应用于项目中的所有数据库&…