数据库设计-分库 分表
为什么要分库?
数据库中的数据量不一定是可控的,业务增长是成几何式增长,在未进行分库分表的情况下,随着时间 和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开 销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO 等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
可以读写分离; 化整为零----把一个大的整体拆分成多个小的个体;
纵向(垂直)切分表 ---------特定:数据库和数据库之间不会出现相同表;
把一个库中的表通过业务上的划分,分别部署到不同的数据库服务器上; 电商:会员,订单,商品、物流、仓储、支付、类别、财务,评论,售后、众筹、预售
优势: 高并发场景下,垂直切分一定程度的提升IO、数据库连接数、单机硬件资源的瓶颈 解决业务系统层面的耦合,业务清晰 与微服务的治理类似,也能对不同业务的数据进行分级管理、维护、监控、扩展等
缺点: 部分表无法join,只能通过----接口聚合-----方式解决,提升了开发的复杂度 分布式事务处理复杂 依然存在单表数据量过大的问题(需要水平切分)
把频繁查询的字段包含在一个表中,不频繁(冷门)查询的字段----放入到另外一个表中去;二者通 过主外键/相同主键来关联
横向(水平)分表 ----------一般出现在单表数据量过于庞大的场景,把表由一个表变成多个表-----每个表结构完全一 样;数据完全不同
a ) 时间-----非常常见的
b)类型 会员表-----不同的会员类----svip vip
c ) 数据的不同状态
d ) 根据表数据条数来处理(超过多少条,就来一个新表)----定义规则
e) 随机算法-----平均算法
1.需要定义规则---如何定义规则?----专门用来确定要操作的是哪个表;
2.在保存数据库的时候,需要使用这个规则确定要保存到哪个表中去
3.查询的时候,需要确定要到哪个表中去查询
表分区--SQlserver自己带的功能;
一般情况下,我们建立数据库表时,表数据都存放在一个文件里。 但是如果是分区表的话,表数据就会按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分 为多个小文件,还可以把这些小文件放在不同的磁盘下由多个cpu进行处理。这样文件的大小随着拆分 而减小,还得到硬件系统的加强,自然对我们操作数据是大大有利的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现