系统设计 - 指标累加
电商营销系统中有许多需要累加计数的功能,如商品、活动、用户参与活动次数、商品参与次数等。这些都是属于完成某个任务需要计数的范畴!而商品、活动、用户、时间等又可以组合,以满足各种业务需求!
常规的如活动总次数、活动每日次数,商品库存数、参与活动商品库存数、每天参与活动商品库存数,用户参与活动次数、用户每天参与活动次数、用户参与活动商品次数、用户每天参与活动商品总次数等。这些还只是在活动、用户、时间、商品,4个维度,如果再增加个按门店维度,就会有5个维度。按理说,维度是可以一直增加,怎么样设计一个能够支撑的系统了?
在梳理这些逻辑时,找出一个规律就是这些所有计数的东西,都是围绕着人来的。
活动总次数:所有人能够参与这个活动的总数
商品库存数:所有人能够购买的的商品总数
每天参与活动商品库存数:所有人在1天的时间能够购买的商品总数
用户参与活动次数:1个用户参与这个活动的总次数
用户每天参与活动次数:1个用户参与这个活动1天的总次数
用户参与活动商品次数:1个用户购买商品的总次数
用户每天参与活动商品次数:1个用户购买商品1天的总次数
如再再加一个门店维度
活动门店总次数:所有人能够在这个门店参与活动的总次数
活动门店每日总次数:所有人能够在这个门店1天的活动总次数
以上这些是按用户维度来归类,就会有2种
所有人共享的变量
- 库存是共享变量
- 活动总次数是共享变量
个人的不同维度变量
- 每人参与活动次数
- 每人购买商品份数
- 每人按时间参与活动
- 每人按时间购买份数
- 每人在指定门店参与活动次数
- 每人在指定门店按时间参与活动次数
有了这层思考后,整个系统的设计将会非常简单了,总体设计就是2个领域
共享指标领域和用户指标领域
共享指标:
{
"toolId": 133, 活动id
"userQuota": 2, 所有用户参与总次数
"userQuotaUse": 1,
"userDayToolQuota": [
{
"userQuota": 1, 所有用户在7月15日参与总次数
"userQuotaUse": 0,
"day": "2025-07-15" 日期
},
{
"userQuota": 1, 所有用户在7月16日参与总次数
"userQuotaUse": 0,
"day": "2025-07-16" 日期
}
],
"skuSnQuota": [
{
"id": "000004100", 商品ID
"skuSnQuota": 23, 商品总使用份数
"skuSnQuotaUse": 0
}
],
"skuSnDayToolQuota":[
{
"id": "000004100", 商品ID
"skuSnQuota": 23, 商品在7月15日总使用份数
"skuSnQuotaUse": 0,
"day":"2025-07-15" 日期
},
{
"id": "000004101", 商品ID
"skuSnQuota": 23, 商品在7月16日总使用份数
"skuSnQuotaUse": 0,
"day": "2025-07-15" 日期
}
]
}
用户指标:
{
"toolId": 141,
"userQuota": 0, 当前用户参与这个活动总次数
"userQuotaUse": 0,
"userDayToolQuota": [
{
"userQuota": 1, 当前用户在7月15日参与活动总次数
"userQuotaUse": 0,
"day": "2025-07-15" 日期
},
{
"userQuota": 1, 当前用户在7月16日参与活动总次数
"userQuotaUse": 0,
"day": "2025-07-16" 日期
}
],
"userSkuSnQuota": [
{
"id": "000004100", 商品唯一ID
"skuSnQuota": 1, 用户购买这个商品的总份数
"skuSnQuotaUse": 1,
"userQuota": 1, 用户购买这个商品的总次数
"userQuotaUse": 1
}
],
"userSkuSnDayQuota": [
{
"id": "000004101", 商品唯一ID
"day": "2025-07-21", 日期
"userQuota": 1, 用户在7月21日购买这个商品的总次数
"userQuotaUse": 1,
"skuSnQuota": 1,
"skuSnQuotaUse": 1 用户在7月21日购买这个商品的总份数
}
]
}
注意其中的次数与份数,用户维度指次数,商品维度指份数。区分这个原因是需求可以要求设定按次数限制和份数据限制。
如果需要再加维度,比如上面提到的再细划到指定商铺维度!
那么共享指标设计:
{
"toolId": 133, 活动id
"userQuota": 2, 所有用户参与总次数
"userQuotaUse": 1,
"userStoreQuota": [
{
"storeId": 123456, 店铺ID
"userQuota": 1, 所有用户在这个店铺参与总次数
"userQuotaUse": 0
},
{
"storeId": 654321, 店铺ID
"userQuota": 1, 所有用户在这个店铺参与总次数
"userQuotaUse": 0
}
],
"userStoreDayQuota": [
{
"storeId": 123456, 店铺ID
"userQuota": 1, 所有用户在这个店于7月15日参与总次数
"userQuotaUse": 0,
"day": "2025-07-15" 日期
},
{
"storeId": 123456, 所有用户在这个店于7月16日参与总次数
"userQuota": 1, 所有用户在7月16日参与总次数
"userQuotaUse": 0,
"day": "2025-07-16" 日期
}
]
}
而用户指标的设计以此类推。
在这个设计中,只有共享指标更新时存在并发抢锁问题,只要在更新的地方做好并发控制。而用户指标因为是在用户维度,不会存在并发问题。
好的设计可以减少系统复杂度,也能减轻开发难度。
毛选开篇就说谁是我们的朋友、谁是我们的敌人,这是革命首要搞明白的问题!而设计指标计数系统首要搞明白的是哪些是共享指标计数,哪些是用户指标计数!有了这个基调再去思考指标系统就非常简单明白了。

浙公网安备 33010602011771号