前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >电商交易订单业务数据库设计演进

电商交易订单业务数据库设计演进

作者头像
用户1278550
发布于 2024-02-23 10:48:28
发布于 2024-02-23 10:48:28
6280
举报
文章被收录于专栏:idbaidba

图片由通义万相生成

交易订单业务

大白话: 交易订单业务是在线交易的核心业务单元 。交易其实就是用户从各个平台买东西,搜索到自己需要的商品,领优惠券,然后点击下单购买,再进行支付,卖家发货,买家确认收货这样的一个流程。

业务访问基础模型

从上图可知,交易链路涉及系统繁多,业务逻辑也非常复杂,最简化的说,从表存储往上看, 不管业务逻辑如何,只是涉及到读写纬度的访问逻辑:

写入:

  1. 订单表承担 交易相关信息,订单号,买家id,卖家id,商品,支付状态,时间 等等写入。

读取

  1. 订单号纬度查询 ,最简单的 售后时,客服根据订单号查询交易相关信息。
  2. 买家纬度查询,基于用户id,手机号,昵称等查询买家的订单数据,比如用户登陆app 查看所有订单,待发货订单
  3. 卖家纬度查询,基于卖家id,店铺id,卖家手机等等纬度查询卖家纬度的订单数据,比如统计双十一 某个商家的成交总量。

演进

任何产品和业务都是从 0 到1 ,然后逐步发展到1到100,到1w 甚至更高的业务量。随着数据量增加,业务对数据的存取使用更加复杂,首先要解决的是面对海量业务数据,如何解决 订单表的设计和数据存储

本文介绍订单表的设计相关事项,其实还有其他问题,比如 热点大卖家,海量数据存储成本问题,如何解决数据查询和归档,等等。

单表

电商业务刚刚开始发展时,订单表是以单表存储的。因为数据量相对较少,几百万w ,甚至几千万的量级。单个表就能满足 买卖家纬度的各种查询,随着业务的不断发展,单表的问题逐步凸显出来。

问题

  1. 单表数据量越来越大,涉及聚合查询性能越差。
  2. 单表 DDL 维护困难,锁表,或者copy表的方式 耗时长而且性能抖动。(如果使用 MySQL 8.0 会好很多。)

分库分表

为了应对海量的数据增长,我们需要对业务数据进行分库或者分库分表操作。此时业务面临的问题在于: 如何合理设置合理的分表规则,拆分规则 才能满足业务对数据的访问需求。

我们通常使用的分表规则是选取业务表的某一列作为分表键进行哈希打散到各个数据库中。基于前面的业务访问情况,我们可以选择的分表键键有买家id,卖家id,订单号。

比如 交易数据库计划分128个库, 分2048张分表。

基于买家 id

对于买家id buy_id 取模 比如 buy_id%2048%128 ,先分表,然后再落到不同的分库里面。

注意 这里 buy_id%2048%128 是直接取模2048,再分配到 128个分库里面 ,其实关于取模可以加上业务逻辑,比如如果提前规划业务多活的话,就要取更大范围比如 10000, 将分表键范围锁定 0-9999,比取模 2048 多4倍的,将数据更均匀的打散到不同的数据库中。

优点:

  1. 数据相对均匀分布,还说一般没有超级买家的说法,每天购物100笔,一年也才30w条记录,如果真的有,要对该用户提供
  2. 支持查询单个交易 类似 K-V 点查和 范围查询。

缺点:

  1. 不能满足卖家纬度的查询和分析。
  2. 不能满订单号纬度的查询。
基于卖家 id

对于卖家id进行 取模分表 , seller_id%2046%128

缺点:

  1. 卖家会有 超大卖家的说法,比如天猫的头部商家 小米,苏宁等等,每年双十一都有上百万的订单量,按照年计算会更大,从数据存储角度来看会有严重的数据倾斜问题。
  2. 不能满订单号纬度/买家 id 的查询。
订单号

基于 进行订单号取模,order_no%2046%128

优点:

  1. 数据分布均匀,不存在热点问题。根据订单号获取订单相关数据,类似K-V查询 ,一般都是点查。

缺点:

  1. 无法根据买/卖家id维度进行数据分析和查询。

最优解

  1. 基于 MySQL 架构,上面三种场景无法再同一套库中完成,需要创建2个数据库: 买家库和卖家库,数据相同,但是查询纬度不一样。所有的业务数据只在买家端写入,买家订单信息和商家修改订单以订单维度写入买家库。然后通过 DTS 等CDC 工具同步 买家库的binlog 到卖家库。(当然 业务逻辑上可以有订单交易服务中心统一控制 数据的访问接口)
  2. 买家卖家是两个纬度,但是订单号 和 买家 是同一个写入源 ,买家从购物车,商品页面结算的时候,订单号和买家id 一起写入同一行记录。因此可以同时满足基于买家id 和 订单号查询。
  3. 对订单号进行定制,订单号由订单号 sequence(seq_order_id ) + 买家id ( buyer_id)组成。只是 订单号的取模逻辑和 买家id 需要保持一致, 末尾四个数字。比如 买家id 的后四位 1024 , 订单 id 的后四位也可以是 1024。(也可以由分片规则指定1024 在订单号中具体的位置)

总结

虽然说本文是说的订单数据设计,但是也适用于其他业务场景,从小业务量到海量数据的数据库演进。

另外良好的IT,业务架构是演进出来的,并非是一步到位,就能达到完美的架构。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yangyidba 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
电商交易系统核心技术
电商诞生已经有20多个年头了,从早期很多人的质疑、骗子、不接受、甚至肄业排斥、打压,到现在彻底融入我们生活的方方面面,并号称中国的 “新四大发明”,“认知教育”使命已经完成。人们足不出户,网上下个单,就可以在家坐等收包裹,确实是一种享受。
微观技术
2020/08/20
2.9K0
美团团购订单系统优化记
团购订单系统简介 美团团购订单系统主要作用是支撑美团的团购业务,为上亿美团用户购买、消费提供服务保障。2015年初时,日订单量约400万~500万,同年七夕订单量达到800万。 目标 作为线上S级服务,稳定性的提升是我们不断的追求。尤其像七夕这类节日,高流量,高并发请求不断挑战着我们的系统。发现系统瓶颈,并有效地解决,使其能够稳定高效运行,为业务增长提供可靠保障是我们的目标。 优化思路 2015年初的订单系统,和团购其它系统如商品信息、促销活动、商家结算等强耦合在一起,约50多个研发同时在同一个代码库上开发
美团技术团队
2018/03/12
2.1K0
美团团购订单系统优化记
电商系统之订单系统
订单系统作为电商系统的“纽带”贯穿了整个电商系统的关键流程。其他模块都是围绕订单系统进行构建的。订单系统的演变也是随着电商平台的业务变化而逐渐演变进化着,接下来就和大家一起来解析电商平台的“生命纽带”。
纯洁的微笑
2018/09/26
3.6K0
百亿级数据分表后怎么分页查询?
当业务规模达到一定规模之后,像淘宝日订单量在5000万单以上,美团3000万单以上。数据库面对海量的数据压力,分库分表就是必须进行的操作了。而分库分表之后一些常规的查询可能都会产生问题,最常见的就是比如分页查询的问题。一般我们把分表的字段称作shardingkey,比如订单表按照用户ID作为shardingkey,那么如果查询条件中不带用户ID查询怎么做分页?又比如更多的多维度的查询都没有shardingkey又怎么查询?
艾小仙
2021/01/05
1.5K0
百亿级数据分表后怎么分页查询?
BATJ一线互联网都爱问的海量数据问题,如何处理?
今年以来,网络上时不时的就会传出“某某公司又裁员了,技术团队也被裁了”,其中不乏我们熟悉的一些大厂。
乔戈里
2019/04/24
4100
BATJ一线互联网都爱问的海量数据问题,如何处理?
交易日均千万订单的存储架构设计与实践
导读 在京东物流技术中台架构升级项目中,物流交易体系以新的接入-交易-履约-执行四层架构进行重新搭建,其中交易订单负责物流与客户之间产生物流服务契约的单据流量收口,同时承载向下游物流履约层分发的职责。在这个大的背景下,交易需支撑日千万订单存储,如何保障订单数据基座高扩展、高可用、高吞吐?
京东技术
2023/10/27
1K0
交易日均千万订单的存储架构设计与实践
单台 MySQL 支撑不了这么多的并发请求,我们该怎么办?
关系型数据库的事务特性可以帮我们解决很多难题,比如数据的一致性问题,所以常规业务持久化存储都会mysql 来兜底。但mysql 的性能是有限的。当业务规模发展到上百万用户,访问量达到上万QPS时,单台mysql实例很难应付。
微观技术
2020/08/20
2.3K0
海量数据写入——万级并发的订单系统如何分库?
虽然很多互联网公司的体量很大、用户非常多,但你千万不要被这些现象迷惑了。实际上,90% 以上的系统能够发展到上百万、上千万数据量已经很不错了。对于千万的数据量,开源的 MySQL 都可以很好地应对,更别说一些商业数据库了。
Java程序猿阿谷
2021/03/05
7570
海量数据写入——万级并发的订单系统如何分库?
猿设计23——真电商之订单中的那些秘密
经过前面一段时间的学习,相信你对类目、属性、商品、促销、库存、购物车的业务和设计有了一定的了解。上一章节我们也讨论了订单的实体信息。
山旮旯的胖子
2020/08/17
5590
猿设计23——真电商之订单中的那些秘密
唯品会架构师是如何实现架构重构的
随着唯品会业务的快速发展,订单量的不断增长,原有的订单存储架构已经不能满足公司的发展了,特别是在大促高峰期,原订单库已经成为抢购瓶颈,已经严重制约公司的发展。
lyb-geek
2018/12/19
1K0
唯品会架构师是如何实现架构重构的
日订单量达到100万单后,我们做了订单中心重构
几年前我曾经服务过的一家电商公司,随着业务增长我们每天的订单量很快从30万单增长到了100万单,订单总量也突破了一亿。当时用的Mysql数据库。根据监控,我们的每秒最高订单量已经达到了2000笔(不包括秒杀,秒杀TPS已经上万了。秒杀我们有一套专门的解决方案,详见《秒杀系统设计~亿级用户》)。不过,直到此时,订单系统还是单库单表,幸好当时数据库服务器配置不错,我们的系统才能撑住这么大的压力。
用户7927337
2020/11/04
2.5K1
日订单量达到100万单后,我们做了订单中心重构
【万字长文】电商系统架构, 常见的 9 个大坑 | 库存超卖、重复下单、物流单ABA...
做为一名程序员,发展方向大致可以分为两个方面:一个是业务架构,一个是技术架构(中间件方向)。
微观技术
2022/04/07
1.2K0
【万字长文】电商系统架构, 常见的 9 个大坑 | 库存超卖、重复下单、物流单ABA...
如何通过Binlog来实现不同系统间数据同步
互联网时代除了业务迭代速度快,还有就是数据增速也比较快。单应用、单实例、单数据库的时代早已不复返。现在,作为技术研发,如果参与的项目没有用到分库分表,都不好意说自己做过大项目。
微观技术
2020/08/20
1.5K0
vivo 全球商城:电商平台通用取货码设计
随着O2O线上线下业务的不断扩展,电商平台也在逐步完善交易侧相关的产品功能。在最近的需求版本中,业务方为进一步提升用户的使用体验,规划了取货码生成及订单核销相关逻辑,目的是让线上的用户在付完款之后能够到店取货或者安排导购派送。
2020labs小助手
2022/09/13
7410
vivo 全球商城:订单中心架构设计与实践
原创 官网商城开发团队 [vivo互联网技术](javascript:void(0)😉 1周前 收录于话题 #架构设计 16 #vivo商城 7 一、背景 随着用户量级的快速增长,vivo 官方商城 v1.0 的单体架构逐渐暴露出弊端:模块愈发臃肿、开发效率低下、性能出现瓶颈、系统维护困难。 从2017年开始启动的 v2.0 架构升级,基于业务模块进行垂直的系统物理拆分,拆分出来业务线各司其职,提供服务化的能力,共同支撑主站业务。 订单模块是电商系统的交易核心,不断累积的数据即将达到单表存储瓶颈,系统难以支
jwangkun
2021/12/23
1.3K0
vivo 全球商城:订单中心架构设计与实践
淘宝高并发订单的数据库方案
周末参加了@淘宝技术嘉年华 主办的技术沙龙, 感觉收获颇丰,非常感谢淘宝人的分享。这里我把淘宝下单高并发解决方案的个人理解分享一下。我不是淘宝技术人员,本文只是写自己的理解,所以肯定是会有一些出入的。
后端技术探索
2018/08/09
2K0
有赞订单管理的三生三世与“十面埋伏”
有赞订单管理主要承接有赞所有订单搜索及详情展示功能,系统随着业务的不断发展经历了多次飞升之路。下面简单介绍下有赞订单管理系统的三生三世与“十面埋伏”。
有赞coder
2020/08/25
4950
有赞订单管理的三生三世与“十面埋伏”
大神分享美团外卖订单中心演进之路
作者:何轼 来源: http://tech.meituan.com/mt_waimai_order_evolution.html 前言 美团外卖从2013年9月成交首单以来,已走过了三个年头。时期,事
小小科
2018/05/04
2.9K1
大神分享美团外卖订单中心演进之路
美团外卖订单中心的演进 转
美团外卖从2013年9月成交第一单以来,已走过了三个年头。期间,业务飞速发展,美团外卖由日均几单发展为日均500万单(9月11日已突破600万)的大型O2O互联网外卖服务平台。平台支持的品类也由最初外卖单品拓展为全品类。
chinotan
2019/04/03
1.1K0
干货 | 支持10X增长,携程机票订单库Sharding实践
作者简介 初八,携程资深研发经理,专注于订单后台系统架构优化工作;JefferyXin,携程高级后端开发专家,专注系统性能、业务架构等领域。 一、背景 随着机票订单业务的不断增长,当前订单处理系统的架构已经不能满足日益增长的业务需求,系统性能捉襟见肘,主要体现在以下方面: 数据库CPU资源在业务高峰期经常达到50%以上,运行状况亮起了黄灯 磁盘存储空间严重不足,需要经常清理磁盘数据腾挪可用空间 系统扩容能力不足,如果需要提升处理能力只能更换配置更好的硬件资源 因此我们迫切需要调整和优化机票订单数据库
携程技术
2022/06/13
8770
干货 | 支持10X增长,携程机票订单库Sharding实践
推荐阅读
相关推荐
电商交易系统核心技术
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档