用单库自增键来生成id了,后期怎么分库?哎,这个坑大!

简介: 系统性考虑问题,知其然,知其所以然。

星球水友“写代码的”提问:
沈老师,我们现在用户中心是单库单表uid使用数据库自增主键,uid被很多业务关联,不能变化 现在用户中心数据量逐步变大,有分库需求了,如何由单库升级为多库,保持历史uid不变,并且新生成的数据不冲突有什么好办法么? ==问题描述完== 应该有不少公司都会利用数据库“插入数据自动自增id”来作为业务id,这种方法会使得业务与id生成强耦合,导致id生成算法难以升级。
今天和大家一起简单探讨下,id生成要考虑哪些要素。画外音:别误会,不是说“自增id”不好,是说它与业务耦合了,难以升级。
一、id生成要考虑的技术点 几乎所有业务,都会有一个业务唯一标识:

  • 用户标识:uid(user-id)

  • 消息标识:mid(msg-id)

  • 订单标识:oid(order-id)

这个标识,在存储系统里通常是主键,主键使用聚集索引 (clustered-index) ,即在物理存储上以这个id排序。 于是,对这个id有: 唯一性 趋势递增性的要求。

这个标识,也经常被用来做流量负载均衡,数据负载均衡的依据,即这个id必须在统计上必须是完全随机的。 于是,对这个id有: 随机性 的要求。
同时,id生成算法升级,理论上对业务系统是透明的。 于是,对这个id的生成有: 独立性 需求。 为了保证id生成的上述特性,要有一个: uint64_t GenID() 的独立方法(或者独立接口)来生成id, 生成id具体做什么用,该方法不关心 ,可以是用来做uid,也可以是用来做oid,甚至log-id。 当然, id生成的具体细节,业务也不用关心 。即,GenID()的内部实现,可以是利用数据库的自增id,也可以使用时间递增,目前行业内最流行的,是仿照snowflake生成分布式id。 这个封装, 屏蔽了id生成的细节,保留方案升级的可能性 ,是系统设计中,解耦的体现。 如果使用了此类方法生成业务id,数据库由单库扩展多库就很容易了: (1)确定一个路由算法,例如hash取模; (2)将单库中的数据,通过这个路由算法迁移到多库中去,以实现单库数据量的减少; (3)通过这个路由算法寻找数据(读); (4)通过这个路由算法插入数据(写);
假如架构设计前期没有提前考虑独立的id生成,后期又要实施单库拆多库,该怎么办呢? 二、针对星球水友提到的例子
历史的坑已经铸成,没有解耦id生成方法,而且也没法批量修改id,该怎么办呢?
假设由单库拆分为3库,可以这么玩: (1)做一个1主2从数据库集群,相当于每条数据复制成了3份; (2)将路由算法,设为取模hash算法,%3; (3) 第一个库 ,%3=0, 把余1和余2的uid删掉 (4)第二个库,%3=1,把余0和余2的uid删掉; (5)第三个库,%3=2,把余0和余1的uid删掉; (6) 将每个库的自增步长设置为3 ,这样每个库的id生成就不会重复了; (7)升级用户中心,按照路由算法查询uid数据; 搞定,拆库扩容达成: (1)单库数据量 下降 为了原来的1/3; (2)读写实例个数 扩充 为了原来的3倍; (3)并且id生成与查询都不会冲突; 希望这个取巧的方法对你有帮助。 但更希望,大伙提前考虑id生成 唯一性、随机性、趋势递增性、独立性
系统性 考虑问题,知其然,知其所以然

欢迎大家继续提问,有问必答。

本文转自“架构师之路”公众号,58沈剑提供。

目录
相关文章
|
19天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
32173 117
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
9天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
4719 4
|
15天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6811 18
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
14天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4769 11
|
16天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
5667 21
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
12天前
|
人工智能 JavaScript 安全
Claude Code 安装指南
Claude Code 是 Anthropic 推出的本地 AI 编程助手,支持 Mac/Linux/WSL/Windows 多平台一键安装(Shell/PowerShell/Homebrew/NPM),提供 CLI 交互、代码生成、审查、Git 提交等能力,并内置丰富斜杠命令与自动更新机制。
4242 0
|
16天前
|
存储 人工智能 机器人
OpenClaw是什么?阿里云OpenClaw(原Clawdbot/Moltbot)一键部署官方教程参考
OpenClaw是什么?OpenClaw(原Clawdbot/Moltbot)是一款实用的个人AI助理,能够24小时响应指令并执行任务,如处理文件、查询信息、自动化协同等。阿里云推出的OpenClaw一键部署方案,简化了复杂配置流程,用户无需专业技术储备,即可快速在轻量应用服务器上启用该服务,打造专属AI助理。本文将详细拆解部署全流程、进阶功能配置及常见问题解决方案,确保不改变原意且无营销表述。
6236 6
|
18天前
|
人工智能 JavaScript 应用服务中间件
零门槛部署本地AI助手:Windows系统Moltbot(Clawdbot)保姆级教程
Moltbot(原Clawdbot)是一款功能全面的智能体AI助手,不仅能通过聊天互动响应需求,还具备“动手”和“跑腿”能力——“手”可读写本地文件、执行代码、操控命令行,“脚”能联网搜索、访问网页并分析内容,“大脑”则可接入Qwen、OpenAI等云端API,或利用本地GPU运行模型。本教程专为Windows系统用户打造,从环境搭建到问题排查,详细拆解全流程,即使无技术基础也能顺利部署本地AI助理。
7760 17