开发者社区> 问答> 正文

再问订单号生成算法?

务场景,高并发,多用户操作

使用microtime生成的时间戳生成唯一订单序列号,事实上高并发情况下有一定的重复几率,就连uniqid($more_entropy参数为false)函数生成的序列号都可能有重复的可能(真坑爹),而$more_entropy设置为true的话返回的序列号又太长了

我想用:业务号+年月日+(当天订单数据+1)+用户ID

可是,光查询订单数量这一步就耗时210毫秒左右,太耗资源了

SELECT COUNT(nid)
  FROM `node`
 WHERE type= 'mobile_number'
   AND DATE_FORMAT(FROM_UNIXTIME(created), '%Y-%m-%d')= DATE_FORMAT(NOW(), '%Y-%m-%d')

请问,大家是如何处理这一问题的


暂时使用@_Yud 同学的建议,添加个每天清表的事件

drop event `com`.`truncate_1`;
CREATE EVENT `com`.`truncate_1` 
  ON SCHEDULE EVERY 1 DAY
  STARTS  '2015-01-21 00:00:00'  ON COMPLETION NOT PRESERVE  
  ENABLE  
  COMMENT 'order_seq' 
  DO begin
 
/**event body**/
truncate table order_seq;
 
end

展开
收起
小旋风柴进 2016-03-11 09:42:42 4188 0
1 条回答
写回答
取消 提交回答
  • order_seq:
    
    pkid | autoincrement
    
    
    insert into order_seq set pkid=null;

    得到返回的主键为(当天订单数据+1)部分

    每天对pkid做清0

    2019-07-17 18:58:23
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载