Random 亚马逊如何生成订单号?

Random 亚马逊如何生成订单号?,random,e-commerce,amazon,guid,uuid,Random,E Commerce,Amazon,Guid,Uuid,注意:我已经阅读了一些较老的问题,例如,但是我的问题更具体一些 生成伪随机数不久就会遇到“生日问题”。例如,如果我使用27位字段作为订单号,在输入15000个条目后,冲突的几率增加到50% 我想知道像亚马逊这样的大型电子商务企业是否以其他方式生成订单号,例如: 预生成整个集合并从中随机选取(数百GB的数据库) 使用从特定种子编号开始的词典“下一个排列” 日期、用户id等参数的MD5或SHA-1散列,截断为14位 等 我想要的只是一个特定宽度的非重复整数(不需要非常随机,除非混淆订单总数)。关

注意:我已经阅读了一些较老的问题,例如,但是我的问题更具体一些


生成伪随机数不久就会遇到“生日问题”。例如,如果我使用27位字段作为订单号,在输入15000个条目后,冲突的几率增加到50%

我想知道像亚马逊这样的大型电子商务企业是否以其他方式生成订单号,例如:

  • 预生成整个集合并从中随机选取(数百GB的数据库)
  • 使用从特定种子编号开始的词典“下一个排列”
  • 日期、用户id等参数的MD5或SHA-1散列,截断为14位

我想要的只是一个特定宽度的非重复整数(不需要非常随机,除非混淆订单总数)。关于如何实现这一点,您有什么想法吗?

建议以相反的格式从日期开始,然后从1开始,然后是一个校验(或随机)数字。如果您每天的订单量可能永远不会超过100份,则需要添加两位数字加上一个检查/随机数字

年份只需包括最后两位数字,可能只包括最后一位数字,这取决于您保存订单记录的时间:7年左右通常就足够了,这意味着2009年的记录(从9开始)可以在2018年删除,以便在2019年再次使用订单号。您可以使用mmdd表示接下来的4位数字,或者简单地对一年中的天数进行编号,只使用3位数字——这取决于您希望该数字对人类的友好程度。也可以省略一个月的哪一天,在每个月初而不是每天重新开始序列号

今天是2017年11月2日,假设今天是第16号订单,您的订单号为71102168(其中8是校验位或随机位)。如果您可能有多达但不超过1000个数字,则需要一个额外的数字,即:711020168。为了避免限制自己的位数,您可能更喜欢使用连字符:71102-168…如果愿意,您可以在检查/随机数字之前包含另一个连字符:71102-16-8


如果您有多个区域处理订单,您可能希望在日期开始或之后包括一个仓库编号,允许您在每个仓库使用序列号-例如,仓库5可能是:5-71102-168、71102-5-168或711025168。同样,如果您不使用连字符,您需要评估您是否需要多达10个、100个或1000个(等)可能的仓库编号。我希望这有帮助

你是在问亚马逊是怎么做的还是怎么做的?对于这么大的东西,你需要一个数学家和/或工程师,你不能指望在问答部分解决这样的问题。“如果我使用27位字段作为我的订单号,在15000条输入后,冲突的几率增加到50%。”然后使用更长的数字。。。27位甚至不是5个字符。@Blender-我在问我怎么做。亚马逊是我看到的最接近的例子。我不想对他们的算法进行反向工程。Thilo——好吧,我用它来说明人们需要对随机数更加小心。我只是想了解如何对生成方法更加严格。@Sandeep:如果在插入新订单号之前查询数据库,则发生冲突的可能性为零。如果您的任务是减少数据库操作的数量,则可以在数据库中创建订单号池,并在需要时从队列中弹出一个订单号池。