摘要:規范定義來自于發布的一個規范。其中的字母是進制表示,大小寫無關。在里面的使用的例子其中,最后的個字符就是我電腦網卡的地址版本安全的安全的和基于時間的算法相同,但會把時間戳的前位置換為的或。
一、簡介
UUID,是Universally Unique Identifier的縮寫,UUID出現的目的,是為了讓分布式系統可以不借助中心節點,就可以生成UUID來標識一些唯一的信息;
GUID,是Globally Unique Identifier的縮寫,跟UUID是同一個東西,只是來源于微軟。
規范定義
UUID來自于IETF發布的一個規范:A Universally Unique IDentifier (UUID) URN Namespace。
UUID來源于OSF的DCE規范,也就是RFC4122的前身
GUID來源于微軟,注意RFC4122的作者之一是微軟員工
下面摘錄一下,RFC4144中的Abstract
This specification defines a Uniform Resource Name namespace for
UUIDs (Universally Unique IDentifier), also known as GUIDs (Globally
Unique IDentifier). A UUID is 128 bits long, and can guarantee
uniqueness across space and time. UUIDs were originally used in the
Apollo Network Computing System and later in the Open Software
Foundation"s (OSF) Distributed Computing Environment (DCE), and then
in Microsoft Windows platforms.
This specification is derived from the DCE specification with the
kind permission of the OSF (now known as The Open Group).
Information from earlier versions of the DCE specification have been
incorporated into this document.
不知道起什么標題好
1個UUID是1個16字節(128位)的數字;為了方便閱讀,通常將UUID表示成如下的方式:
123e4567-e89b-12d3-a456-426655440000
1個UUID被連字符分為五段,形式為8-4-4-4-12的32個字符。
其中的字母是16進制表示,大小寫無關。
二、不同的版本
UUID本身也經過了多個版本的演化,每個版本的算法都不同。
標準格式
UUID的格式是這樣的:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
N那個位置,只會是8,9,a,b
M那個位置,代表版本號,由于UUID的標準實現有5個版本,所以只會是1,2,3,4,5
各個版本簡介
版本1:基于時間的UUID
通過當前時間戳、機器MAC地址生成;
由于在算法中使用了MAC地址,這個版本的UUID可以保證在全球范圍的唯一性。
但與此同時,因為它暴露了電腦的MAC地址和生成這個UUID的時間,這就是這個版本UUID被詬病的地方。
在python里面的使用的例子:
import uuid uuid.uuid1() UUID("444b5cc0-ae5d-11e6-8d22-28924a431726") uuid.uuid1() UUID("46a9bf21-ae5d-11e6-9549-28924a431726")
其中,最后的12個字符28924a431726就是我電腦網卡的MAC地址
版本2:DCE安全的UUID
DCE安全的UUID和基于時間的UUID算法相同,但會把時間戳的前4位置換為POSIX的UID或GID。
不過,在UUID的規范里面沒有明確地指定,所以基本上所有的UUID實現都不會實現這個版本。
版本3:基于名字空間的UUID(MD5)
由用戶指定1個namespace和1個具體的字符串,通過MD5散列,來生成1個UUID;
根據規范描述,這個版本的存在是為了向后兼容?平時這個版本我們也很少用到
在python里面的使用的例子:
import uuid uuid.uuid3(uuid.NAMESPACE_DNS, "myString") UUID("21fc48e5-63f0-3849-8b9d-838a012a5936") uuid.uuid3(uuid.NAMESPACE_DNS, "myString") UUID("21fc48e5-63f0-3849-8b9d-838a012a5936")
在java中使用的例子
System.out.println(UUID.nameUUIDFromBytes("myString".getBytes("UTF-8")).toString());
Java只支持生成版本3和版本4的UUID
版本4:基于隨機數的UUID
根據隨機數,或者偽隨機數生成UUID。這種UUID產生重復的概率是可以計算出來的,但隨機的東西就像是買彩票:你指望它發財是不可能的,但狗屎運通常會在不經意中到來。這個版本應該是平時大家無意中用得最多的版本了;
在python里面使用的例子:
import uuid uuid.uuid4() UUID("e584539d-a334-4f15-9819-88d73fcf707d") uuid.uuid4() UUID("76ec02cc-1b1d-4ad3-bd09-a4f6d67c7af4")
以及Java中大家最熟悉的:
System.out.println(UUID.randomUUID().toString());
版本5:基于名字空間的UUID(SHA1)
和版本3一樣,不過散列函數換成了SHA1
在python里面的使用的例子:
import uuid uuid.uuid5(uuid.NAMESPACE_DNS, "myString") UUID("cd086011-6aac-5a06-a94a-0b67c59649ba") uuid.uuid5(uuid.NAMESPACE_DNS, "myString") UUID("cd086011-6aac-5a06-a94a-0b67c59649ba")
三、UUID的應用
從幾個版本的定義來看,感覺都不是特別完美,可能版本4是平時用得最多的,但是在現實的業務場景中,考慮到可讀性、唯一性、長度,我們一般也不會選擇UUID當做數據庫的主鍵。
至于其他場景的應用,可以結合具體的場景,來使用各個版本的實現。
四、UUID和各個編程語言
微軟:http://msdn.microsoft.com/en-...
Linux:http://en.wikipedia.org/wiki/...
Android:http://developer.android.com/...
PHP:http://php.net/manual/en/func...
MySQL:http://dev.mysql.com/doc/refm...
Java:http://docs.oracle.com/javase...
nodejs - https://github.com/broofa/nod...
參考:
https://en.wikipedia.org/wiki...
https://github.com/simongong/...
http://www.blogjava.net/feely...
轉自:http://www.jianshu.com/p/d77f...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/17609.html
摘要:但對于整個事件流上的別的元素來說,執行順序還會受到另外一個因素的影響。以上面的場景為例,在捕獲階段執行的事件,如果執行,則事件流終止,不會到達目標階段,的世界則不會被執行執行結果為線上參考事件流 向dom綁定事件的事件的三種方式 行內綁定 按鈕 js內綁定 btnDom.onclick = function clickHandler() { console.log(click)...
摘要:前端渲染過程的二三事本文不會介紹整個前端渲染過程的步驟,只是記錄最近閱讀的文章的些許思考和感悟。那么現在我們可以明白這個問題的關鍵所在了,因為在大部分頁面中是擁有的,而由于其解析順序,那么在事件之前必定已經成功構造樹。 前端渲染過程的二三事 本文不會介紹整個前端渲染過程的步驟,只是記錄最近閱讀的文章的些許思考和感悟。(文章地址一(系列),文章地址二) 希望大家在閱讀這篇文章之前能將上述...
摘要:分表字段的選擇。問題產生之前提到在分表應用上線前我們需要將原有表的數據遷移到新表中,這樣才能保證業務不受影響。雖說凌晨的業務量下降,但依然有少部分的請求過來,也會出現各種數據庫異常。 showImg(https://segmentfault.com/img/remote/1460000019462791?w=496&h=285); 前言 本篇是上一篇《一次分表踩坑實踐的探討》,所以還沒...
閱讀 881·2023-04-25 19:17
閱讀 2179·2021-09-10 11:26
閱讀 1898·2019-08-30 15:54
閱讀 3411·2019-08-30 15:53
閱讀 2681·2019-08-30 11:20
閱讀 3392·2019-08-29 15:12
閱讀 1230·2019-08-29 13:16
閱讀 2384·2019-08-26 12:19