数据库伸缩设计-分库分表如何做?读书笔记

news2024/10/6 7:00:54
一些企业内部系统,用户数量和业务规模有限,因此并不会产生巨大的数据量,这时数据库的存储和读写性能均不会成为瓶颈,没有扩容的需要,因此无须考虑伸缩性。对于一些互联网系统,前后端应用可以通过CDN 、缓存、负载、水平扩展等技术解决瓶颈问题,但是数据库成为最终的读写集中点, 每天都在产生海量的数据和读写请求,因此成为系统瓶颈。
Redis MongoDB NoSQL 数据库虽然支持数据分片,但是并不能取代关系型数据库,对于逻辑关系紧密、复杂的系统,必须借助关系型数据库良好的事务特性来支持。绝大多数公司依然主要采用关系型数据库,而将其他数据库作为辅助。
对于 MySQL 数据库,虽然理论上单表可以支撑上亿条数据,但是性能较差,增加索引、优化SQL 语句已经于事无补。阿里巴巴规约提出 单表行数超过500 万行或单表容量超过 2GB ,才推荐进行分库分表。这个建议的目的是避免过度设计。
数据库的扩容主要采用分库分表的策略,按照垂直拆分和水平拆分两个维度,可分为4 种策略,分别是垂直分表、垂直分库、水平分表和水平分库

1.垂直分表

在一个数据库内,将一个表垂直拆分为多个关联表,表的结构彼此不相同。比如有一个商品表,里面包含商品基本信息,商品广告信息,商品促销信息,但是有的字段频繁访问多,有的则比较少几乎不访问,比如商品促销一年促销几次,此时就可以做垂直分表,将商品表垂直拆分为商品基本信息,商品广告信息,商品促销信息三个表,三个表之间通过相同的商品ID做关联,每个表只包含商品信息的部分字段。

这样就减少了每个表的字段数量,同时尽量将经常访问的字段放在同一个表中,不经常访问的字段放在其他表中,提高数据的检索速度。垂直分表对程序设计有影响,需要同步调整程序。

2.垂直分库

垂直分库是一个数据库拆分为多个数据库,企业早期将所有业务表都放在一个数据库中,包含用户、订单、 产品等所有数据。各个服务都连接到同一个库,从而造成数据库的存储、连接数、读写性能都成为系统瓶颈。

垂直分库就是将一系列相关的表单独拆分为一个数据库,达到专库专用的目的,可以提升数据库的读写性能、连接数。
虽然垂直分表、垂直分库有诸多好处,但是依然没有解决单表数据量过大的问题,每个表中还是存储全量数据。例如,一个订单表有 一千万条数据,垂直拆分为多个表或多个库后,单表依然是一千万条数据。

3.水平分表

水平分表的特点是在同一个数据库内,将一个表水平拆分为多个表,表结构均相同。当单表记录数过大时可以进行水平拆分。

4.水平分库

水平分库的特点是将同一个表水平拆分到多个数据库中,每个表的结构相同。 水平分库与水平分表的原理基本相同,即将一个表拆分为多个相 同结构的表,分散在不同的数据库中。
水平分库也面临着诸多问题:如何进行跨库关联查询?如何进行跨库的分页和排序?如何保证数据事务的一致性?如何进行数据迁移?分库分表的基本原则有以下3 点。
1 )不进行过度设计,不需要将所有库、所有表都进行分库分表。分库分表虽然有诸多好处,很好地解决了数据库的存储容量和性能瓶颈,但是程序复杂度会急剧升高,出现问题的概率呈指数级增长。
2 )不在项目初期就进行分库分表,而是动态调整。当单表数据量增长到一定程度时再进行分库分表即可。
3 )先垂直拆分,再水平拆分。如果垂直拆分能够解决问题,则不需要再进行水平拆分。

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

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

相关文章

基于Zynq SDIO WiFi移植二(支持2.4/5G)

1 SDIO设备识别 经过编译,将移植好的uboot、kernel、rootFS、ramdisk等烧录到Flash中,上电启动,在log中,可看到sdio设备 [ 1.747059] mmc1: queuing unknown CIS tuple 0x01 (3 bytes) [ 1.761842] mmc1: queuing unknown…

vite学习教程06、vite.config.js配置

前言 博主介绍:✌目前全网粉丝3W,csdn博客专家、Java领域优质创作者,博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。 博主所有博客文件…

Meta MovieGen AI:颠覆性的文本生成视频技术详解

近年来,生成式AI技术的发展迅猛,尤其是在文本生成图像、文本生成视频等领域。Meta公司近期推出的MovieGen AI,以其强大的文本生成视频能力震撼了整个AI行业。本文将详细解读Meta MovieGen AI的核心技术、功能特性及其在实际应用中的潜力。 一…

ssrf学习(ctfhub靶场)

ssrf练习 目录 ssrf类型 漏洞形成原理(来自网络) 靶场题目 第一题(url探测网站下文件) 第二关(使用伪协议) 关于http和file协议的理解 file协议 http协议 第三关(端口扫描&#xff09…

Linux自动化构建工具Make/Makefile

make是一个命令 makefile是一个文件 touch 创建并用vim打开makefile 写入依赖对象和依赖方法 mycode是目标文件 第二行数依赖方法 以tab键开头 make makefile原理 makefile中写的是依赖关系和依赖方法 clean英语清理文件 后不用加源文件。.PHONY定义clean是伪目标。 make只…

各省份-产业链现代化水平(2001-2022年)

产业链现代化水平是一个综合性指标,它为我们提供了一个多维度的视角来评估各省份在产业链现代化进程中的发展水平。这个指标涵盖了技术创新、产业升级、生产效率、产业结构优化等多个方面,包含原始数据、测算结果以及参考文献。 2001年-2022年各省份-产…

Debezium日常分享系列之:Debezium 3.0.0.Final发布

Debezium日常分享系列之:Debezium 3.0.0.Final发布 Debezium 核心的变化需要 Java 17基于Kafka 3.8 构建废弃的增量信号字段的删除每个表的详细指标 MariaDB连接器的更改版本 11.4.3 支持 MongoDB连接器的更改MongoDB sink connector MySQL连接器的改变MySQL 9MySQL…

vscode 连接云服务器(ubantu 20.04)

更改服务器系统 如果云服务器上的系统不是ubantu20.04的,可以进行更改: 登录云服务官网(这里以阿里云为例)点击控制台 点击服务器实例 点击更多操作、重置系统 点击重置为其他镜像、系统镜像:选择你要使用的系统镜像…

[Linux]:线程(三)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. POSIX 信号量 1.1 信号量的概念 为了解决多执行流访问临界区&#xff0c…

Java中的break、continue和return语句

break、continue和return break语句引入基本介绍基本语法示意图注意事项练习String字符串的比较 continue跳转控制语句基本介绍基本语法示意图 return跳转控制语句 break语句 引入 随机生成1-100的一个数,直到生成了97这个数,看看你一共用了几次&#…

前端性能优化 面试如何完美回答

前言 性能优化是目前在面试中被问到非常多的问题,主要就是通过各种算和技术来提高页和应用的速度和用户体前端性能优化的问题并不好回答 在回答的时候干万不要掉进一个误区,认为性能优化只是几个技术点而已,事实上性能优化涉及到的是多方面的…

【2024年10月测试通过】conda下使用虚拟环境安装最新版pytorch2.4+cuda12.4

开头先说重点: 1.采用conda的虚拟环境,会在沙盒环境下安装好所有所需包,而且该虚拟环境拷贝给其他人员可以直接用,很方便。 2.pytorch官网访问不了,有一个国内镜像推荐,地址为PyTorch - PyTorch 中文 3.…

unity ps 2d animation 蛇的制作

一、PS的使用 1.打开PS 利用钢笔工具从下往上勾勒填充 2.复制图层,Ctrl T,w调为-100% 3.对齐图层并继续用钢笔工具进行三角勾勒 3.画眼睛,按U快捷键打开椭圆工具,按住Shift可以画圆,填充并复制图层对称。 4.画笔工具,打开小…

Golang | Leetcode Golang题解之第458题可怜的小猪

题目: 题解: func poorPigs(buckets, minutesToDie, minutesToTest int) int {if buckets 1 {return 0}combinations : make([][]int, buckets1)for i : range combinations {combinations[i] make([]int, buckets1)}combinations[0][0] 1iterations…

「漏洞复现」用友U8 CRM config/fillbacksettingedit.php SQL注入漏洞

0x01 免责声明 请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任。工具来自网络,安全性自测,如有侵权请联系删…

蓝牙定位的MATLAB仿真程序(基于信号强度,平面内的定位,四个蓝牙基站)

这段代码通过RSSI信号强度实现了蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。它涵盖了信号衰减模型、距离计算和最小二乘法估计等基本概念。通过图形化输出,用户可以直观地看到真实位置与估计位置的关系。 文章目录 蓝牙定位原理蓝牙定位的原理优缺…

【综合性渗透利器】- TscanPlus

如果你在寻找一款轻量级、实用且开源的漏洞扫描工具,那么 TscanPlus 绝对值得一试。这款工具由 TideSec 团队打造,以其简洁、高效、易用的特点,广受好评,目前在github上拥有1.5k star。 为什么推荐 TscanPlus? 无论你…

基于Zynq SDIO WiFi移植一(支持2.4/5G)

基于SDIO接口的WIFI&#xff0c;在应用上&#xff0c;功耗低于USB接口&#xff0c;且无须USB Device支持&#xff0c;满足某些应用场景 1 硬件连接 2 Vivado工程配置 3 驱动编译 3.1 KERNRL CONFIG (build ENV) 修改 export KERNELPATH<path of kernel header>export T…

【web安全】——SSRF服务器端请求伪造

1.SSRF漏洞基础 1.1SSRF漏洞概述与成因 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。 一般情况下&#xff0c;SSRF攻击的目标是从外网无法访问的内部系统。&#xff08;正是因为它是由服务端发起的&#xf…

Java--IO高级流

缓冲流 缓冲流,也叫高效流&#xff0c;是对4个基本的FileXxx 流的增强&#xff0c;所以也是4个流&#xff0c;按照数据类型分类&#xff1a; 字节缓冲流&#xff1a;BufferedInputStream&#xff0c;BufferedOutputStream 字符缓冲流&#xff1a;BufferedReader&#xff0c;Buf…