后端进阶-分库分表

文章目录

今天跟着训练营学习了分库分表,整理了学习笔记。

为什么需要分库

单机的数据库连接数是有限的,在高并发的场景下同时操作一个数据库容易将连接耗尽,使后序的数据库访问无法正常进行。

同时也是容量问题,单机容量毕竟使有限的,当存储量不断增加,数据库的容量无法全部承载。用多个库在存储,增加数据库的实列。

为什么需要分表

当一张表的数据库很大的时候,查询会变得很慢,虽然底层基于b+树速度还是很快的。分表可以减少每个表中的数据量,提高查询的效率。

提升写入性能,分表分散写入压力。

减轻锁的竞争,大表容易出现锁的竞争,导致性能下降。

什么时候需要分库分表

只需要分库

连接数不够需要进行分库。

微服务场景业务拆分,进行微服务拆分的时候根据业务边界,将各个业务的数据从数据库中拆分出来。

比如电商微服务系统,将订单、物流、商品、会员等分别存储到独立数据库中。

只需要分表

数据量太大了,单表超过了500万行或者单表数据量超过了2GB,就推荐分表了。单表数据库多,并发量不高,查询和存储性能遇到了瓶颈。

分库分表解决方案

垂直分库

专库专用,根据不同的业务将数据放在不同的数据库中去。

水平分库

将单表数据库切分到多个数据库服务器上去,每个库结构一样。来实现水平拓展。

垂直分表

垂直分表使对业务中字段较多的大表进行的一种优化策略,比如用户表分为两个,一个是用户的基本信息,还有一个是用户的详细信息。拆分后的小标只包含部分字段,两个表之间通过主键和外键关联。

水平分表

将一个表数据分到多个表中去。

分库分表常用算法

范围算法

根据时间、地点等信息,进行分库分表。

hash分片


查表分片





分库分表模式

客户端模式

小公司使用

代理模式


相关推荐
阿钱真强道12 分钟前
30 嵌入式操作系统 | 上位机界面:Flask 网页显示 + 控制闭环
后端·python·flask
小狼1545416 分钟前
拼多多订单数据导出 CSV 实战:接口分页、字段平铺与 5 个数据坑,多多开票助手
java·前端·javascript
Joe_Wang520 分钟前
【从0到1学习JVM · 25】同样都要停顿所有线程,Parallel比Serial到底强在哪
java·jvm·学习·垃圾回收
wuminyu21 分钟前
JVM虚拟线程的底层实现原理分析
java·linux·c语言·jvm·c++
做运维的阿瑞25 分钟前
mysql数据库分组查询:GROUP BY 与 HAVING 的执行逻辑
数据库·sql·mysql
念何架构之路40 分钟前
go-grpc服务端调用
开发语言·后端·golang
我的div丢了肿么办1 小时前
go语言中如何安装第3方的包
后端·go
弹简特1 小时前
【Java项目-企悦抽】13-奖品管理模块-奖品列表和创建奖品的实现
java·开发语言·网络·springboot
小蒜学长1 小时前
基于Spring Boot+Vue的“禾源”农产品销售系统设计与实现(代码+数据库+LW)
java·spring boot·后端·农产品销售系统·产品溯源
光年20001 小时前
Mock-Server开箱即用的Mock服务
java·maven·mock·jetty