一、概述:
UUID(Universally Unique Identity)的縮寫,是一種軟體建構的標準,通常由32位元組16進位數表示(128位),它可以保證時間和空間的唯一性。目前應用最廣泛的UUID事微軟的GUIDs。
二、作用:
UUID讓分布式系統所有元素都有唯一的辨識資訊,讓每個人都可以建立與他人不同的UUID,不需考慮資料庫建立時的名稱重複問題。隨機產生字串,當成token、使用者帳號、訂單等。
三、原理:
UUID是指一台機器上產生的數字,他保證同一時空所有機器都是唯一的。
UUID由以下幾部分構成:
(1)時間戳記:根據目前時間或者時鐘序列產生字串
(2)全劇唯一的機器識別號,根據網卡MAC地址或者IP擷取,如果沒有網卡則以其他方式擷取。
(3)隨機數:機器自動隨機一組序列
等等
四、演算法
uuid有5種產生演算法,分別是uuid1()、uuid2()、uuid3()、uuid4()、uuid5()。
1、uuid1()基於時間戳記
由MAC地址、目前時間戳、隨機數字。保證全球範圍內的唯一性。但是由於MAC地址使用會帶來安全問題,區域網路內使用IP代替MAC
2、uuid2() 基於分布式環境DCE
演算法和uuid1相同,不同的是把時間戳記前四位換成POIX的UID,實際很少使用。注意:python中沒有這個函數
3、uuid3() 基於名字和MD5散列值
通過計算名字和命名空間的MD5散列值得到的,保證了同一命名空間中不同名字的唯一性,不同命名空間的唯一性。但是同一命名空間相同名字產生相同的uuid。
4、uuid4() 基於隨機數
由偽隨機數得到的,有一定重複機率,這個機率是可以算出來的
5、uuid5() 基於名字和SAHI值
演算法和uuid3相同,不同的是使用SAHI演算法
五、使用經驗:
1、python中沒有DCE,所以uuid2可以忽略
2、uuid4存在機率重複性,由於無映射性,最好不使用
3、如果全域的分布式環境下,最好使用uuid1
4、若名字的唯一性要求,最好使用uuid3或者uuid5
六、使用: