多租户数据库设计:代购系统的MySQL隔离方案

简介: 一租户一库权衡;订单/子单/包裹;索引与汇率锁价表;读写分离时机

适合谁看:要给代购/集运 SaaS 选型存数据方案的后端与 DBA。
不适合可以跳过:单库单商户、没有租户概念的小项目。

上一篇讲状态机时,状态落在哪张表,已经决定了你后三年的迁移成本。这篇把存的问题摊开:八十余个独立站点,数据怎么放,才既隔离又扛得住查询。

仍以 taocarts 这类跨境代购与集运系统的建模思路为例,表名用业务语义称呼,不暴露真实库表名。

1. 痛点:隔离性 vs 成本 vs 变更速度

多租户存储常见三条路:

方案 隔离 成本 变更 一句话
共享库共享表 + tenant_id 靠纪律 最低 一次迁移全网 代码漏 where 就串站
共享实例多 Schema 中等 权限与备份粒度变好一点
一租户一库 连接/备份变多 变更可灰度单站 故障面收敛

代购站支付、物流、运费差异大,出过错的代价是「串单/串用户」。这种业务里,一租户一库通常比「先共享表以后再说」更便宜——便宜在风险,不在云账单。

2. 中央注册库与业务库分层

不要把「站点列表」和「订单明细」塞同一个业务库硬扛。更干净的分层:

[中央注册库]
  - 站点档案:域名、状态、套餐
  - 连接信息:业务库 DSN(加密存储)
  - 全局开关:维护窗口等

[业务库 × N]
  - 用户/订单/包裹/轨迹/财务流水
  - 仅本站数据

请求经域名解析拿到站点后,只打开对应业务库连接。报表汇总走离线任务,禁止业务 API「for 每个库 select 一遍」当常态。

3. 订单主数据:单、子单、包裹

一次代购很少是「一行订单搞定」。更常见的拆法:

订单头(Order)
  ├─ 费用与支付意图(应付、已付、币种、锁价快照)
  ├─ 子单/采购行(Order Line)—— 每个商品链接/SKU 一行
  └─ 包裹(Package)—— 仓内合包后的出库单位
        └─ 物流运单(Shipment)—— 国际段单号与渠道

设计要点:

  • 行与头分离:采购失败可以落在某一行,不必整单死亡。
  • 包裹是履约单位:合包后轨迹挂在包裹/运单上,不要只挂在商品行上导致一对多混乱。
  • 状态字段:头状态与行状态、包裹状态分开存;用状态机约束,而不是三个字段随便改。

示意(逻辑模型,非建表语句照抄):

ORDER(id, user_id, state, currency, locked_fx_rate, paid_amount, ...)
ORDER_ITEM(id, order_id, source_url, sku, qty, purchase_state, ...)
PACKAGE(id, user_id, state, weight, ...)
PACKAGE_ITEM(package_id, order_item_id, ...)
SHIPMENT(id, package_id, carrier, tracking_no, ...)

4. 索引:先保高频查询

代购后台最烫的查询通常是:

  • 按订单号
  • 按用户
  • 按国内快递单号(入仓扫描)
  • 按国际运单号(客服查件)
  • 按状态 + 时间(工作台队列)

原则:

  1. 等值查询优先独立索引或最左前缀命中
  2. 状态队列(state, updated_at) 类组合,避免 state 低基数列单打。
  3. 运单号全局唯一约束要落到「站点库内唯一」;跨站本来就分库,不必强行全球一张唯一表。
  4. 警惕「所有筛选条件都建联合索引」——写放大比读慢更伤。

慢查询来了先看执行计划,再谈分库分表。很多站的量级,索引与冷热归档就够。

5. 汇率与锁价:钱相关表单独建模

跨境下单最容易扯皮的是:下单汇率退款汇率不是同一个瞬间。

建议至少:

FX_RATE(currency_pair, rate, source, effective_at)     -- 行情/拉取
FX_LOCK(order_id, currency_pair, locked_rate, locked_at) -- 订单锁价快照

下单时把锁价快照写进订单头(或锁价表),退款策略预先定为:按锁价、按退款日行情、或按规则取较差方——策略写进配置,数字写进快照。禁止每次展示现算现改历史订单金额。

金额字段用整数最小币种单位或精确小数类型,禁止 float。

6. 扩展路线:什么时候读写分离,什么时候分表

经验顺序:

  1. :索引、归档历史单、缓存热点配置
  2. :只读副本扛报表与模糊搜索
  3. 然后:单站内大表按时间分表(订单历史)
  4. 最后:才考虑更复杂的分布式中间件

一租户一库已经在租户维度分片。多数代购站,瓶颈在「某几个大站的某几张热表」,而不是「八十个小站的总和」。优化要打在热站,而不是平均主义上中间件。

7. 迁移与 DDL

独立库的红利:可以灰度——先迁 1 个站验证 DDL,再滚动。
独立库的代价:DDL 要平台化(任务队列遍历站点连接),禁止人工「开 80 次 navicat」。

变更纪律:

  • 兼容性发布:先加列可空 → 再双写 → 再切读 → 再删旧列
  • 禁止高峰直接改大表结构无 online ddl 评估

8. 总结

多租户数据库设计,先选隔离方案,再谈性能。代购独立站场景里,一租户一库 + 中央注册 + 订单/行/包裹分层 + 锁价快照,是一套可长期活的底子。分库分表是后手,不是第一天的勋章。


本系列《跨境代购系统技术实战》① 多租户隔离 → ② 订单状态机 → ③ 多租户 MySQL(本文)。后续预告:插件化支付/物流、集运合包算法。

标签:多租户 MySQL 订单建模 索引优化 汇率锁价 代购系统

相关文章
|
17天前
|
人工智能 算法 API
千问办公收编三大智能体,跨境电商协同架构的技术实践解析
千问办公整合QoderWork、悟空、MuleRun三大Agent,打通桌面操作、云端算力与内部系统,实现从“AI陪聊”到“AI干活”的跃迁。聚焦跨境电商协同断层,以状态机驱动物流节点、规则引擎保障合规、本地化处理守护数据安全,推动企业级AI真正落地提效。(239字)
|
23天前
|
人工智能 自然语言处理 API
阿里云Token Plan订阅计划详解:AI 模型订阅计划能力、订阅方案与价格、最新活动参考
本文介绍了阿里云百炼推出的Token Plan大模型统一订阅服务,该服务以Credits为统一计量单位,仅在华北2(北京)地域生效,一份订阅即可覆盖150余款主流大模型,支持文本、图像、视频、语音等多模态能力,兼容Cursor、Qoder、Qwen Code等主流AI编程与智能体工具。产品分为个人版与团队版两大体系,个人版三档套餐限时低至39元/月,适配个人开发者从入门到重度使用的全场景需求;团队版主打多席位管理、用量精细化管控与数据不用于训练的合规保障,满足企业级多人协作与生产部署要求。
|
23天前
|
人工智能 Java API
本体相关的开源项目有哪些?从 Ontology 到 Knowledge Graph,再到 AI Agent
本文深入探讨“本体(Ontology)”在AI新时代的核心价值,聚焦其如何为Agent构建可理解、可推理的业务世界模型。梳理12个关键开源项目(如Protégé、Owlready2、Ontop、Graphiti等),覆盖本体建模、知识图谱、虚拟图谱、LLM驱动构建与Ontology-RAG等前沿方向,揭示Ontology正从学术概念跃升为AI Agent的“业务操作系统”。
612 0
|
1月前
|
人工智能 BI API
一文读懂百炼 Token Plan:支持模型、Credits 计费规则与 API 接入实操教程
在AI开发日常工作当中,很多开发者会遇到一个普遍痛点:不同模型、不同AI工具需要分开开通会员、分开充值,文本推理、图像生成、视频生成、代码智能体各自对应一套账单,不仅预算难以管控,频繁切换平台也打断开发思路,工具之间API密钥、接口地址互不通用,前期调试和后期对账都要耗费大量时间成本。百炼Token Plan作为一站式AI大模型订阅服务,正是为了解决这类场景而生,以Credits作为统一抵扣单位,一份订阅就可以调用文本、多模态、图像、视频等大量模型,同时兼容市面上主流AI编程工具、终端智能体工具,帮助个人开发者、小团队以及中小企业实现资源统一管理,简化模型调用链路,规避按量付费带来的突发高额账
162 0
|
Java 关系型数据库 MySQL
②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]
②⑩② 【读写分离】Sharding - JDBC 实现 MySQL读写分离[SpringBoot框架]
458 0
|
传感器 算法 小程序
基于ESP32的平衡车设计与实现方法(含源码)
基于ESP32的平衡车设计与实现方法(含源码)
1306 0
|
存储 算法 Linux
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
510 1
|
存储 缓存 Java
【JAVA】深入了解 Java 中的 DelayQueue
【JAVA】深入了解 Java 中的 DelayQueue
|
人工智能 运维 架构师
数美科技首席架构师陈建:基于云上弹性的高可用实时风控架构实践
2023年10月31日-11月2日,2023云栖大会在中国杭州·云栖小镇举行,北京数美时代科技有限公司首席架构师陈建在【CloudOps云上运维专场】发表了题为《基于云上弹性的高可用实时风控架构实践》的主题演讲,从在线实时风控架构及高可用解决方案等方向做了分享。

热门文章

最新文章