2010-08-16 42 views
0

我正在嘗試爲客戶創建訂單號以供使用。我將有多臺機器無法訪問相同的數據庫(因此無法使用主鍵並生成唯一的ID)。生成訂單號 - 在多臺機器上保持唯一 - 唯一的字符串種子

我會,我可以使用一些算法,將生成一個唯一的字母數字看編號的順序號種子的唯一字符串。我不想使用這個唯一的字符串作爲訂單號,因爲它的內容在外觀上不適合用於訂單#的客戶。

有沒有可能到使用GUID &我唯一的字符串一些算法來創建一個獨特的訂單號的結合? 歡迎任何建議。

回答

1

如果你有一個相對較小數量的機器,每個人可以有它自己的配置文件或設置,您可以將字母分配給每臺機器(A,B,C ...),然後按字母追加到訂單號,它可能只是每個數據庫中的自動遞增整數。

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 ...),所以如果你曾經需要結合數據庫合併爲一個,每個訂單仍然是唯一的。

0

您可以使用ID和作爲主鍵,如果你(或者在Oracle中使用序列)生成它們從存儲過程ID。

您需要做的是讓每臺機器產生一個不同的範圍,例如機從1到100萬,機器B從1000001 2000000等

0

你說你有一個獨特的字符串,那會不會是「合適的」展示給客戶。

如果只是不恰當和不必要的,即安全/隱私相關,您可以以某種方式進行轉換。一個簡單的例子是Rot13

但一般來說,我也建議使用UUID(但第4版)的隨機數。生成重複的概率非常低,並且有許多可用編程語言的庫。