后端进阶-分库分表

文章目录

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

为什么需要分库

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

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

为什么需要分表

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

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

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

什么时候需要分库分表

只需要分库

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

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

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

只需要分表

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

分库分表解决方案

垂直分库

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

水平分库

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

垂直分表

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

水平分表

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

分库分表常用算法

范围算法

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

hash分片


查表分片





分库分表模式

客户端模式

小公司使用

代理模式


相关推荐
数据库小学妹16 小时前
集群与分布式啥区别?从主从集群到分布式实战
分布式·分布式数据库·数据库架构·集群·分库分表·主从集群·集群与分布式
互联网中的一颗神经元17 小时前
01. Go 内存管理全景架构
java·jvm·golang
长栎17 小时前
你的 AI 品控规则越来越多了——但它们已经在打架了,你没看见
后端
萧瑟余晖17 小时前
Java深入解析篇三十四之分布式事务
java·开发语言·分布式
CAE虚拟与现实17 小时前
源码注解 /class 注解 / 运行时注解三者生命周期
java·开发语言
有脚就行17 小时前
第24篇-Go-gRPC推理服务-高性能跨语言通信
开发语言·人工智能·后端·golang
不好听61317 小时前
NestJS 是什么?一张图看懂企业级后端的骨架
后端·nestjs
互联网中的一颗神经元17 小时前
02. 核心概念与术语表
java·jvm·spring
liuxiaocheng17 小时前
文本生成的进阶:generateText / streamText 里迟早会撞上的东西
前端·后端·ai编程
January120717 小时前
Cassandra CQL 基本命令详解
java