生成订单号 - 在多台机器上保持唯一 - 唯一的字符串种子

时间:2010-08-16 20:43:07

标签: guid unique uuid

我正在尝试为客户创建订单号以供使用。我将拥有多台无法访问同一数据库的计算机(因此无法使用主键并生成唯一ID)。

我将拥有一个唯一的字符串,我可以将其用于某种算法的种子,该算法将为订单号生成一个独特的字母数字ID#。我不想将此唯一字符串用作订单#,因为其内容在外观上不适合客户用于订单#。

是否可以结合使用GUID&我的独特字符串用一些算法来创建一个独特的订单#? 接受任何建议。

4 个答案:

答案 0 :(得分:1)

如果您的机器数量相对较少,并且每台机器都有自己的配置文件或设置,您可以为每台机器(A,B,C ......)分配一个字母,然后将该字母附加到订单上number,可以是每个DB中的自动递增整数。

Starting each database ID at 1000:
1001A // First  order on database A
1001B // First  order on database B
1001C // First  order on database C
1002A // Second order on database A
1003A // Third  order on database A
1004A // etc...
1002B
1002C

每个数据库中的订单表都有一个ID列(整数)和“机器”标识符(字符A,B,C ......),因此如果您需要将DB组合成一个,每个订单仍然是唯一的。

答案 1 :(得分:0)

只需使用直线guid / uuid。他们考虑了网络接口的mac地址,使其成为该机器的唯一。

http://en.wikipedia.org/wiki/Uuid

答案 2 :(得分:0)

如果从存储过程(或者使用序列在Oracle中)生成id,则可以使用id作为主键。

您需要做的是让每台机器生成不同的范围,例如机器a从1到1百万,机器B从1000001到2000000等。

答案 3 :(得分:0)

您说您有一个独特的字符串,不适合向客户展示。

如果它只是不合适而且没有必要,即安全/隐私相关,你可以以某种方式改变它。一个简单的例子是Rot13

但通常我也会建议使用UUID(但版本4)来获取随机数。生成重复项的可能性非常低,并且可以使用许多编程语言的库。