e********3 发帖数: 229 | 1 一个ecommerce platform. 当user把item放进购物车时,会reserve the item for the
user for half an hour. 当这half an hour expire, the item would be placed in
the wish list. 当这件item的inventory数量等于reservation数量时,user不能再
reserve the item. 请问如何设计这个system. |
T****U 发帖数: 3344 | 2 这就是shopping cart概念。
shoppoing cart是个transaction.
放入shopping cart就扣inventory, 然后加到processing table,
processing处理完毕,就标记为完成,进入下一步
如果超时,就把processing记录标为未完成,加回inventory
the
in
【在 e********3 的大作中提到】 : 一个ecommerce platform. 当user把item放进购物车时,会reserve the item for the : user for half an hour. 当这half an hour expire, the item would be placed in : the wish list. 当这件item的inventory数量等于reservation数量时,user不能再 : reserve the item. 请问如何设计这个system.
|
e********3 发帖数: 229 | 3
谢谢大牛回复.我是在database里给inventory table加个reservation field.有
reservation就给那个field加上reserved的量,直到它等于inventory的数为止.不知道
相比较你那个缺点在哪?
然后超时这个要怎么判断?用个background thread每分钟扫一次整个表么?肯定不行吧.
..要怎么弄?
【在 T****U 的大作中提到】 : 这就是shopping cart概念。 : shoppoing cart是个transaction. : 放入shopping cart就扣inventory, 然后加到processing table, : processing处理完毕,就标记为完成,进入下一步 : 如果超时,就把processing记录标为未完成,加回inventory : : the : in
|
T****U 发帖数: 3344 | 4 不是大牛,不过我觉得新开一个表比较适合这种临时性质的操作,可以全放进内存,另
外也减少对原表的加锁解锁操作。你加入预订/购物车之后就不需要再多次访问原库存
表了
扫表并不是不可能,毕竟是一个30分钟有效的表而已,数据不会很多。或者加入队列,
每次只扫队列前头而且过期的几个交易。 |
e********3 发帖数: 229 | 5
按照你的意思,是每放入一次购物车就扣一次inventory的表?那每次expire也要再访问
一次inventory的表?
这个表可以很大吧?很多user放N多ITEMS进shopping cart,像AMAZON这种的话那表得很
大.
【在 T****U 的大作中提到】 : 不是大牛,不过我觉得新开一个表比较适合这种临时性质的操作,可以全放进内存,另 : 外也减少对原表的加锁解锁操作。你加入预订/购物车之后就不需要再多次访问原库存 : 表了 : 扫表并不是不可能,毕竟是一个30分钟有效的表而已,数据不会很多。或者加入队列, : 每次只扫队列前头而且过期的几个交易。
|
z****e 发帖数: 54598 | 6 这不就是一个session里面放点东西就好了?
因为只是最近半个小时的,所以当session expire的时候
全部删掉 |
e********3 发帖数: 229 | 7
那你放的东西应该是reserved item quantity吧?那这个你得查下数据库看是不是out
of stock吧?session expires 了还要重新写回去数据库?如果是的话那不就要频繁对表
lock?是这个意思么?还是我没理解对?
【在 z****e 的大作中提到】 : 这不就是一个session里面放点东西就好了? : 因为只是最近半个小时的,所以当session expire的时候 : 全部删掉
|