1、分库与分表的设计一、分库分表方案水平分库以字段为依据按照一定策略hash、range 等将一个库中的数据拆分到多个库中。水平分表以字段为依据按照一定策略hash、range 等将一个表中的数据拆分到多个表中。垂直分库以表为依据按照业务归属不同将不同的表拆分到不同的库中。垂直分表以字段为依据按照字段的活跃性将表中字段拆到不同的表主表和扩展表中。二、分库分表的优点和目的分库分表的根本目的是突破单库单表的性能与容量瓶颈。当数据量、并发量增长到单机无法承载时通过拆分把压力分散到多个数据库实例或多张表上。三、分库分表的代价四、如何解决分库分表查询问题核心原则跨库 JOIN 的解决方案方案 1字段冗余思路把需要 JOIN 的字段直接冗余到主表。例子订单表冗余 user_name查询时不用 JOIN 用户表。优点查询简单、性能高、无跨库。缺点数据冗余、源数据变更需同步。适用冗余不常变更的字段用户名、商品名。方案 2广播表 / 全局表思路小表在每个分片库都存一份JOIN 在本库完成。例子字典表、配置表、地区表在每个库冗余。优点JOIN 无跨库、性能好。缺点需同步到每个分片。适用数据量小、变更极少的表。方案 3ER 分片绑定表思路关联表用同一个分片键让关联数据落在同一分片。例子订单表和订单明细表都按 user_id 分片。优点JOIN 在本分片完成、性能好。缺点分片键选择受限。适用有明确主子关系的表订单 明细。方案 4数据异构到 ES思路Canal 监听 binlog同步到 ES 建宽表JOIN 在 ES 完成。例子订单、用户、商品同步到 ES 宽表查询走 ES。优点支持任意复杂 JOIN、分页、聚合。缺点需维护 ES、数据准实时、最终一致。适用后台管理、多条件筛选、全文检索。方案 5应用层组装思路拆成多次单库查询应用层代码拼装。例子先查订单再用 user_id 查用户最后组装 VO。优点实现简单、灵活。缺点多次网络往返、N1 问题。适用少量数据的关联查询。跨库查询的解决方案方案 1分片键精准路由思路查询条件带分片键直接路由到单个分片。例子按 user_id 分片查询带 user_id 就能精准定位。优点性能最高、无跨分片。缺点不带分片键的查询无法路由。方案 2基因法思路把分片键的片段编码进业务 ID按业务 ID 也能路由。例子order_id 里编入 user_id 基因按订单号查也能定位分片。优点两种查询都能精准路由。缺点ID 生成复杂。方案 3全分片扫描 内存归并思路查询不带分片键时所有分片都查一遍结果在内存归并。优点实现简单。缺点性能差、分片越多越慢。适用低频查询。方案 4ES 异构查询思路复杂查询统一走 ES。优点支持任意条件、分页、聚合。缺点需维护 ES、准实时。方案 5广播表思路小表在每个分片冗余查询本库完成。适用字典表、配置表。五、如何解决分库分表事务问题分库分表后的事务问题本质是跨库操作无法用单机 ACID 保证一致性。解决思路分两层第一层是设计上尽量避免跨库事务第二层才是用分布式事务方案兜底。一、根本原则尽量避免跨库事务最好的分布式事务方案是不需要分布式事务。设计阶段就要让一个事务的数据落在同一分片ER 分片关联数据同分片订单表和订单明细表用同一个分片键 user_id 同一用户的订单和明细落在同一分片本地事务就能搞定。 order_db_0: order_0, order_item_0 ← user_id %20order_db_1: order_1, order_item_1 ← user_id %21字段冗余减少跨库更新收敛强一致操作到单分片把需要强一致的操作用同一分片键路由保证落在同一库。二、分布式事务方案六、分库分表中间件2、Mysql主从复制原理MySQL 主从复制Replication是构建高可用、读写分离、数据备份架构的基础。核心原理是主库把数据变更记录到 binlog从库拉取并重放这些日志保持数据一致。一、复制流程第一步主库写 binlog主库执行写操作INSERT/UPDATE/DELETE时事务提交前把变更写入 binlogbinlog 按顺序记录所有变更主库的 dump 线程 负责把 binlog 发送给从库主库 写操作 → binlog → dump 线程 → 发送给从库第二步从库拉取 binlogI/O 线程从库的 I/O 线程连接主库请求从指定位置binlog 文件名 position开始的 binlog主库 dump 线程把 binlog 发给从库从库 I/O 线程把收到的 binlog 写入本地 relay log更新 master.info记录已拉取到的位置第三步从库重放 relay logSQL 线程从库的 SQL 线程读取 relay log解析出具体的 SQL 或行变更在从库上重放保持数据一致更新 relay-log.info记录已重放到的位置二、binlog 的三种格式三、复制模式异步复制默认主库写完 binlog 就返回不等从库确认优点性能高缺点主库宕机可能丢数据半同步复制主库等至少一个从库收到 binlog 并写入 relay log 后才返回优点减少丢数据风险缺点性能略降全同步复制主库等所有从库都重放完成才返回优点最强一致缺点性能最差很少用组复制MGRMySQL 5.7 官方高可用方案基于 Paxos 协议支持多主/单主自动故障检测和切换四、主从延迟定义主从延迟指从库的数据落后于主库即主库已经提交的变更从库还没重放完成。后果读写分离下读到旧数据最常见的后果。写走主库读走从库数据不一致多个从库延迟不同读不同从库结果不一致故障切换丢数据主库宕机时从库还没同步完业务逻辑错误依赖从库做幂等判断 → 延迟导致重复处理解决方案读写分离 延迟感知写走主库读走从库中间件ProxySQL、ShardingSphere监控从库延迟延迟超过阈值时自动把读请求路由到主库半同步复制主库等至少一个从库确认收到 binlog 才返回减少主库宕机丢数据风险不直接解决延迟但提升数据安全性MGR组复制基于 Paxos 协议强一致自动故障检测和选主适合对一致性要求高的场景级联复制主库只同步给一个中间从库其他从库从中间从库同步减轻主库复制压力但中间层故障会影响下游多线程复制并行复制MySQL 5.7 支持多线程回放从库 SQL 线程从单线程变为多线程最有效的回放加速手段3、Mysql主主复制原理MySQL 主主复制双主复制Master-Master Replication本质上是两个主从复制关系的叠加节点 A 是节点 B 的主库节点 B 也是节点 A 的主库双方互为主从数据双向同步。每个节点既是 Master 也是 Slave所以必须同时开启log-bin作为主库记录 binlog relay-log作为从库存中继日志一、复制流程第一步A 写 binlog 节点A 写操作 → A 的 binlog → A 的 dump 线程 第二步B 拉取 A 的 binlog B 的 I/O 线程 → 连接 A → 请求 binlog → 写入 B 的 relay log 第三步B 重放 relay log B 的 SQL 线程 → 读 relay log → 重放 → B 数据更新 第四步B 自己写入时反过来同步回 A B 写操作 → B 的 binlog → A 的 I/O 线程拉取 → A 重放二、两个关键的防冲突设计既然两边都能写MySQL 用两个机制防止数据打架。防循环复制server-id每个 MySQL 实例必须有唯一的 server-idbinlog 事件里带着 server-id当节点收到自己发出去的事件时会直接忽略避免无限循环防自增主键冲突auto_increment_increment offset如果两边同时插入数据默认自增会生成相同的 ID。解决办法是让两边的 ID 错开生成server-id 和奇偶自增只能防自增主键插入冲突。 如果两边同时更新同一行或产生唯一键冲突 复制线程会直接报错停止 没有自动冲突解决机制三、实际使用Active-Passive 模式正因为冲突难以自动解决生产上极少让两个节点同时写入。标准做法是 Active-Passive主动-被动。┌─────────┐ ┌─────────┐ │ 节点A │ ←─────→ │ 节点B │ │(Active)│ 互相复制 │(Passive)│ │ 写读 │ │ 只读 │ └─────────┘ └─────────┘ ↑ VIP 漂移特点同一时刻只允许一个节点Active接受写请求另一个节点Passive设为 read_only只读或热备配合 Keepalived 提供 VIPActive 挂掉 → VIP 漂移到 Passive → 它接管写入四、主主 vs 主从
企业数字化 ERP 产品动态
相关推荐
容易考的行业证书:2026年高含金量又容易上手的推荐榜单 考证这件事,很多人一听就头大,觉得肯定要脱层皮。但实际上,在2026年的今天,有不少行业证书不仅考试难度亲民,而且对求职、转行、升职加薪的助力一点都不小。它们不需要你拿出“头悬梁锥刺股”的狠劲,只要稍… · 2026/9/24 17:40:36
前端工程师转型AI Agent开发:收藏这份完整学习路线,小白也能轻松入门! 本文为前端工程师提供了转型AI Agent开发的完整学习路线。首先介绍了AI基础概念,如LLM、RAG和Agent,然后补充了后端能力,包括Python、API和Backend。接着,深入探讨了AI工程能力,如Prompt Engineering、Tool Calling和M… · 2026/9/24 17:40:36
Java+JSP+MySQL学生信息管理系统:课程设计最稳落地方案 简介:这份资源是面向高校计算机相关专业学生的Java Web课程设计参考项目,采用JSPServletMySQL技术栈实现学生信息管理系统,适合正在准备期末大作业、课程设计或需要练手Java Web完整开发流程的初学者与中级学习者。压缩包共241个文件… · 2026/9/24 18:14:57
基于注意力机制的3D点云语义分割源码解析与实战调优 简介:本资源面向三维视觉与自动驾驶感知方向的研究者和开发者,聚焦如何借助注意力机制提升3D点云语义分割性能,适合具备一定深度学习基础、希望深入理解点云特征学习并落地实战的中高级学习者。压缩包共195个文件,约1.95MB&#x… · 2026/9/24 18:14:57
C# Socket通讯源码实践:粘包拆包、心跳机制与断线重连全解析 简介:这是一份基于C#的Socket网络通讯完整源码,面向初步接触网络编程的C#开发者,适合用来快速理解客户端与服务器之间的通信原理。代码采用WinForm界面,分为server和client两个独立项目,结构简洁,支持文本消… · 2026/9/24 18:14:57
航空图像野火探测数据集与YOLOv8实战:从数据选型到边缘部署 简介:这是一份面向野火探测与火灾识别任务的综合性航空图像数据集,适合从事深度学习目标检测的研究者、算法工程师及遥感方向学生使用,可支撑火灾预警、灾情评估等场景下的模型训练与验证。压缩包共收录2000个文件,全部为XML格式的… · 2026/9/24 18:14:57
Java电商后台系统设计:从能跑到敢上线的实战指南 简介:这是一套基于Java语言开发的电商后台管理系统模拟源码,面向Java后端初学者与中级开发者,聚焦电商核心业务场景学习与系统架构理解。资源完整呈现了类京东/淘宝后台的关键模块实现,涵盖商品管理、订单处理、用户权限控制、MyB… · 2026/9/24 18:14:50
BP神经网络数据回归预测:Matlab完整实现、参数调优与常见问题排查 简介:在工业回归预测与学术实验中,常需借助历史数据推断未知结果,BP神经网络作为经典的非线性映射模型,依靠反向传播算法更新权重,非常契合此类问题;基于此的Matlab实现方案面向机器学习初学者和需要落地预… · 2026/9/24 18:14:50
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44