Fork me on GitHub

Mysql分库分表

分库分表

当一张表的数据达到几千万时,你查询一次所花的时间会变多。分表的目的就在于此,减小数据库的负担,缩短查询时间。

MySQL垂直分区

把不同业务的数据放到不同的数据库服务器,起到了负载分流的作用,大大提升了数据库的吞吐能力。经过垂直分区后的数据库架构图如下:
image

缺点: ①JDBC不支持分布式事物,只有使用JTA实现分布式事物控制;②不能解决单张表数据量暴涨的问题。

MySQL水平分片

将用户按一定规则(按id哈希)分组,并把该组用户的数据存储到一个数据库分片中,即一个sharding,原理图如下:
image
如何来确定某个用户所在的shard呢,可以建一张用户和shard对应的数据表,每次请求先从这张表找用户的shard id,再从对应shard中查询相关数据,如下图所示:
image

除了水平分片和垂直分区解决数据库数据量大导致查询慢的问题,还有数据库的读写分离也可以在一定程度上提高读写的效率。

posted @   晨度  阅读(199)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示