想一个简单的,可不可以弄个时间字段,将时间字段和手机号做个联合唯一
[quote=引用 11 楼 ygycomon 的回复:] 为啥会有一个手机号同时下单的情况,是担心重复提交么?
分布式数据库做离散表吧,可以分为物理分区和逻辑分区,按一定的业务规则进行拆分。 物理分区可以是物理库,也可以是schema 逻辑分区就是不同的表了,即:每个表的结构都一样,tblname不一样。
[quote=引用 12 楼 huangyekan 的回复:] [quote=引用 11 楼 ygycomon 的回复:] 为啥会有一个手机号同时下单的情况,是担心重复提交么?
你应该有2种解决方式 1:放入一个队列,顺序解决,如果并发不大,应该没有问题 2:使用数据库乐观锁
为啥会有一个手机号同时下单的情况,是担心重复提交么?
楼主可能没有明白我说的业务逻辑。 1. 先查询不完成交易表里,有没有当前用户的不完整交易,如果没有,进入2. 如果有进入4. 2. 查询历史记录(完整交易表)里,有没有当前用户的完整交易信息,如果没有,进入3. 如果有进入5. 3. 在不完整交易表里面插入记录,手机号码有唯一限定,如果插入失败,诱导用户进入1. 如果插入成功,则进入支付环节,如果支付失败诱导用户进入4. 4. 重复支付操作一次,如果超过重复支付的最大次数,则终止支付 5. 提示用户已经体验过该服务,不能多次使用。
楼主,你搞一个临时表,里面存放不完整交易的信息。当交易完成或者超时未完成时,清除临时表的记录,基本上就OK了。 你所说的并发控制,说白了,也就是不允许临时表里面出现重复的手机号码,那么,手机号码做个唯一约束就可以了。 临时表的长度,要尽量越小越好。如果并发量大,可以采取分表的方式,分担表的负载。这个是后话。
需求: 一个手机号同一时间只能下一次订单, 关键点是手机号不能作为唯一键(业务需要); 这两个需求有矛盾或者有表达歧义。 解决方案: 单独建个临时订单表 ,只适用于这段时间;临时表中,一个字段记录手机号,unique属性。抢购结束,批量导入正式订单表
67,513
社区成员
225,879
社区内容
加载中
试试用AI创作助手写篇文章吧