发布时间:2026/8/31 9:30:56
分库分表实施 项目仓库java-concurrency-security:用于学习使用的的项目。基于 Spring Boot 2.7 的高并发性能调优 安全监控完整脚手架涵盖 JVM 调优、线程池优化、Redis 缓存防护、分库分表、OAuth2.0 认证、API 网关、ELK 日志收集、SkyWalking APM 监控等核心能力。 - AtomGit | GitCode前言为什么要分库分表类比把数据库想象成图书馆。问题 1图书馆只有一个管理员借书还书的队排到街上了 → 单库连接数不够问题 2书架太多读者找书要花半小时 → 单表数据太多查询慢问题 3消防通道只能过 1 个人遇到紧急情况太危险 → 备份慢恢复慢解决方案开分馆分库每个馆多放几个书架分表让客流分散。1. 什么时候该分不要为了将来分要为现在分。过早分库分表会增加复杂度不分又扛不住业务。指标阈值说明通俗判断单表行数 500 万查询性能开始下降单本读者登记簿已经记不下了单库 QPS 3000连接池和 IO 瓶颈管理员忙不过来单库大小 100GB备份恢复时间过长整馆搬一次要花 2 小时经验法则假如你的订单表已经有 1 亿行单表查询要 10 秒 → 该分了。 如果只有 10 万行但偶尔查询慢 → 先加索引别急分。2. 水平分片按行拆分2.1 什么是水平分片类比水平分片 同一个商品分到多个货架上每个货架摆一部分。 京东商城有 10 亿件商品分布在 100 个仓库每个仓库负责 1000 万件。2.2 分片架构本项目采用2 库 × 4 表 8 张表的水平分片方案shardingSphere 是什么它像一个智能路由器 应用说我要查 user_id123 的订单它自动算出来这条数据在 ds1 的 t_order_2 表里 然后直接去那里取。应用层完全无感知。2.3 分片键选择最关键的一步分片键选错了会导致全表扫描分库分表白做标准说明反面例子高频查询选择 WHERE 条件中最常用的字段选status订单状态但实际很少按状态查数据均匀避免数据倾斜选is_vip会员标记90% 用户都是非会员避免跨片关联查询尽量在同一分片订单用 user_id 分商品用 product_id 分关联查询要扫所有库业务相关选择业务维度选create_time时间会导致数据集中在某段时间内本项目选择分库键user_id同一个用户的所有订单一定在同一个库查询订单不用跨库分表键order_id分散写入压力避免单表热点为什么用 user_id 分库而不是 order_id用户的订单查询占 80% 的请求 → 按 user_id 分可以 100% 命中单一库按 order_id 分库的话查我所有订单要扫所有库2.4 分片算法# 分库user_id 对 2 取模结果 0→ds01→ds1 # 举例user_id123123%21所以订单存到 ds1 # 分表order_id 对 4 取模结果 0~3 对应 4 张表 # 举例order_id1008610086%42所以存到 t_order_2为什么用 HASH_MOD 而不用 MOD哈希取模对连续值如 10086、10087分布更均匀 而普通取模会让相邻的 order_id 落在同一张表造成热点。2.5 分布式 ID雪花算法问题数据分散到 8 张表后ID 不能用数据库自增了 因为两个库同时自增ID 会重复。类比分布式 ID 就像给每个商品印全球唯一编码格式是 地区码 日期 流水号地球上任何地方都不会重复。1bit 符号41bit 时间戳10bit 工作机器12bit 序列号0毫秒级时间机器ID线程每毫秒序号不使用精确到毫秒区分机器每毫秒自增优势✅ 全局唯一包含时间戳机器ID序列号✅ 趋势递增按时间排序范围查询快✅ 高性能本地生成不用等数据库3. 垂直分片按列拆分3.1 垂直分库按业务域类比大公司拆分成不同部门每个部门管自己那摊事。 用户部只管用户数据订单部只管订单数据互不干扰。什么时候用垂直分库不同业务的用户群体差异很大时。 比如商品库可能要 1 万 QPS但用户库只有 100 QPS混在一起就要按最高的配。3.2 垂直分表大字段拆分类比餐厅的菜单主菜单印常点的菜爆款附加单印大菜海鲜。 主菜单薄薄的翻得快海鲜的菜单独放在最后几页。主表 t_product高频查询每次 SELECT 都用到 ├── id, name, price, stock, status -- 字段小常查询 扩展表 t_product_detail低频大字段 ├── product_id -- 关联主表 ├── description TEXT -- 商品详情几千字 ├── images JSON -- 图片列表 ├── specs JSON -- 规格参数什么时候用某条记录的某些字段特别大TEXT、BLOB、JSON 每次查询都把它们读出来很浪费慢、占 IO、占内存。4. 实施步骤4.1 数据迁移流程一句话双写→校验→切读→切写→观察→下线千万不要一次切换大厂踩过的坑 某公司双 11前想当然地一刀切结果新表分片键配置错 导致全公司订单数据错乱最后紧急回滚影响交易 4 小时。4.2 跨分片查询处理场景解决方案类比按 user_id 查订单直接路由到对应分片在指定分馆找书按 order_id 查订单先查映射表再路由不知道分馆就先查图书总目录全局搜索订单用 ES 异构索引找专业图书检索员ES跨分片分页禁止改用 ES 或游标不允许把 8 个馆的书全搬到一起数4.3 分布式事务问题订单表在订单库库存表在商品库账户表在用户库 → 怎么保证要么都成功要么都失败GlobalTransactional // Seata AT 模式自动管理分布式事务 public void createOrder(OrderDTO dto) { orderMapper.insert(order); // 订单库插入订单 inventoryService.deduct(); // 商品库扣库存 accountService.debit(); // 用户库扣余额 } // 三步要么都成功要么都回滚Seata 是什么它像一个协调员每个分库都向协调员汇报 协调员说都成功才提交说有失败就全部回滚。5. ShardingSphere 配置详解参见application.yml中的spring.shardingsphere配置节。5.1 关键配置项配置项作用类比actual-data-nodes实际的数据节点列表我们有哪些仓库database-strategy分库策略按什么分到不同仓库table-strategy分表策略仓库内怎么分货架key-generator分布式主键商品编码规则sharding-algorithms分片算法具体怎么分5.2 常见问题Q分库后还能 JOIN 吗A尽量避免。JOIN 要求扫描多个库性能极差。改为数据冗余在订单表冗余商品名称内存组装先查订单列表再批量查商品 MapES 异构索引最灵活Q分表后怎么分页A禁止LIMIT 100000, 20要扫 100020 条记录。 改用游标分页WHERE id 100020 LIMIT 20ES 全文检索后分页前端加载更多模式

相关新闻

2026/8/28 13:00:55

PKCS#7 填充实战:AES-256 CBC 模式 5 种填充方案性能与安全性对比

PKCS#7 填充实战:AES-256 CBC 模式 5 种填充方案性能与安全性对比在对称加密领域,填充方案的选择往往被开发者视为"次要细节",但实际工程中,它直接影响着系统的安全性和性能表现。当使用AES-256 CBC这类分组加密模式时&…

2026/8/29 6:54:07

安卓平板真实使用指南:连接性、USB-C接口与文件系统决定生产力

1. 这不是一份“参数罗列式”选购指南,而是一份用两年、十台真机、三类核心场景熬出来的安卓平板生存手册 2026年,安卓平板终于甩掉了“买前生产力,买后爱奇艺”的旧标签。但问题没变:你刷到的每一篇推荐,都在用跑分、…

2026/8/30 0:59:47

C++实现搜索引擎核心:正排与倒排索引构建与优化实战

1. 项目概述:从零构建一个C搜索引擎内核如果你对搜索引擎的原理感到好奇,想知道Google、百度这些庞然大物背后最核心的“发动机”是如何工作的,那么亲手实现一个正排和倒排索引,无疑是最好的学习路径。这次,我们不谈那…

2026/8/31 10:08:11

llmfit 本地基准存储:为什么每次运行都先存本地

llmfit 本地基准存储:为什么每次运行都先存本地 【免费下载链接】llmfit Hundreds of models & providers. One command to find what runs on your hardware. 项目地址: https://gitcode.com/GitHub_Trending/ll/llmfit llmfit 是一款面向本地 LLM 推理…

2026/8/31 10:08:11

Agent记忆管理实战:Session、State、Memory与Context全解

大家在做 Agent 项目时,最容易困惑的往往不是提示词怎么写,而是“记忆”到底该怎么管理。同一个用户连续提问,Agent 怎么记得住刚才说过什么?用户上次购买的尺码、偏好,下次对话还要不要保留?会话越来越长&…

2026/8/31 10:08:11

AI生图+大模型文案:小红书图文带货自动化工作流实操

之前做小红书图文带货时,最大的痛点就是素材产出太慢:拍图、修图、写标题、写文案,单条笔记折腾下来大半天就没了。后来我把 AI 生图和大模型文案生成接进了工作流,再用脚本把素材批量整理成待发布文件,整个流程被压缩…

2026/8/31 10:08:11

Compose 修饰符 - 阴影

官方介绍 一、概念 shadow() 会根据组件在屏幕位置呈现不同角度的光照阴影,可以设置阴影高度,更精细的自定义(如阴影扩散或半径等属性)使用另外两个。 Modifier.shadow() 高度阴影 Modifier.dropShadow() 外阴影 Modifier.inne…

2026/8/31 10:03:11

408计算机网络强化复习:分层拆解法与高频题型全攻略

每年都有大量考 408 的同学,在计算机网络这门课上栽跟头。基础课听的时候感觉全懂了,什么 TCP 三次握手、四次挥手,什么 CSMA/CD,老师讲得明明白白;一到自己做题,选择题四个选项全是熟面孔,就是…

2026/8/31 1:05:20

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/8/31 2:14:20

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/8/31 1:41:28

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/8/31 0:07:32

STM32C5设备支持包(IAR DFP)安装指南与常见坑

上一阵子在IAR里折腾一块基于STM32C5系列的新板子,工程从STM32CubeMX导出来之后怎么都编译不过。报错信息很干脆:找不到设备描述文件。跟着错误路径去查,发现指向的是一个让我愣了一下的名字:STMicroelectronics.stm32c5xx.2.1.0.…

2026/8/31 0:07:32

STM32N657 SWO引脚矛盾:CubeMX显示PB3,数据手册为PB5

拿到STM32N657这颗料的第一天,我就撞上了一个让人原地懵圈的引脚矛盾:CubeMX里清清楚楚显示SWO在PB3,翻开数据手册的引脚说明表,却赫然写着PB5。对于一个靠SWO输出调试日志吃饭的人而言,这种"工具和手册打架"…

2026/8/28 16:16:48

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/31 9:19:59

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/31 6:53:02

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…