国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于UUID的二三事

2json / 1720人閱讀

摘要:規(guī)范定義來自于發(fā)布的一個(gè)規(guī)范。其中的字母是進(jìn)制表示,大小寫無關(guān)。在里面的使用的例子其中,最后的個(gè)字符就是我電腦網(wǎng)卡的地址版本安全的安全的和基于時(shí)間的算法相同,但會(huì)把時(shí)間戳的前位置換為的或。

一、簡(jiǎn)介

UUID,是Universally Unique Identifier的縮寫,UUID出現(xiàn)的目的,是為了讓分布式系統(tǒng)可以不借助中心節(jié)點(diǎn),就可以生成UUID來標(biāo)識(shí)一些唯一的信息;

GUID,是Globally Unique Identifier的縮寫,跟UUID是同一個(gè)東西,只是來源于微軟。

規(guī)范定義

UUID來自于IETF發(fā)布的一個(gè)規(guī)范:A Universally Unique IDentifier (UUID) URN Namespace。

UUID來源于OSF的DCE規(guī)范,也就是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.
不知道起什么標(biāo)題好

1個(gè)UUID是1個(gè)16字節(jié)(128位)的數(shù)字;為了方便閱讀,通常將UUID表示成如下的方式:

123e4567-e89b-12d3-a456-426655440000

1個(gè)UUID被連字符分為五段,形式為8-4-4-4-12的32個(gè)字符。

其中的字母是16進(jìn)制表示,大小寫無關(guān)。

二、不同的版本

UUID本身也經(jīng)過了多個(gè)版本的演化,每個(gè)版本的算法都不同。

標(biāo)準(zhǔn)格式

UUID的格式是這樣的:xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

N那個(gè)位置,只會(huì)是8,9,a,b

M那個(gè)位置,代表版本號(hào),由于UUID的標(biāo)準(zhǔn)實(shí)現(xiàn)有5個(gè)版本,所以只會(huì)是1,2,3,4,5

各個(gè)版本簡(jiǎn)介

版本1:基于時(shí)間的UUID

通過當(dāng)前時(shí)間戳、機(jī)器MAC地址生成;

由于在算法中使用了MAC地址,這個(gè)版本的UUID可以保證在全球范圍的唯一性。

但與此同時(shí),因?yàn)樗┞读穗娔X的MAC地址和生成這個(gè)UUID的時(shí)間,這就是這個(gè)版本UUID被詬病的地方。

在python里面的使用的例子:

import uuid
uuid.uuid1()
UUID("444b5cc0-ae5d-11e6-8d22-28924a431726")
uuid.uuid1()
UUID("46a9bf21-ae5d-11e6-9549-28924a431726")

其中,最后的12個(gè)字符28924a431726就是我電腦網(wǎng)卡的MAC地址

版本2:DCE安全的UUID

DCE安全的UUID和基于時(shí)間的UUID算法相同,但會(huì)把時(shí)間戳的前4位置換為POSIX的UID或GID。

不過,在UUID的規(guī)范里面沒有明確地指定,所以基本上所有的UUID實(shí)現(xiàn)都不會(huì)實(shí)現(xiàn)這個(gè)版本。

版本3:基于名字空間的UUID(MD5)

由用戶指定1個(gè)namespace和1個(gè)具體的字符串,通過MD5散列,來生成1個(gè)UUID;

根據(jù)規(guī)范描述,這個(gè)版本的存在是為了向后兼容?平時(shí)這個(gè)版本我們也很少用到

在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:基于隨機(jī)數(shù)的UUID

根據(jù)隨機(jī)數(shù),或者偽隨機(jī)數(shù)生成UUID。這種UUID產(chǎn)生重復(fù)的概率是可以計(jì)算出來的,但隨機(jī)的東西就像是買彩票:你指望它發(fā)財(cái)是不可能的,但狗屎運(yùn)通常會(huì)在不經(jīng)意中到來。這個(gè)版本應(yīng)該是平時(shí)大家無意中用得最多的版本了;

在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一樣,不過散列函數(shù)換成了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的應(yīng)用

從幾個(gè)版本的定義來看,感覺都不是特別完美,可能版本4是平時(shí)用得最多的,但是在現(xiàn)實(shí)的業(yè)務(wù)場(chǎng)景中,考慮到可讀性、唯一性、長(zhǎng)度,我們一般也不會(huì)選擇UUID當(dāng)做數(shù)據(jù)庫(kù)的主鍵。

至于其他場(chǎng)景的應(yīng)用,可以結(jié)合具體的場(chǎng)景,來使用各個(gè)版本的實(shí)現(xiàn)。

四、UUID和各個(gè)編程語(yǔ)言

微軟: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...

轉(zhuǎn)自:http://www.jianshu.com/p/d77f...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/17609.html

相關(guān)文章

  • 與dom事件流相關(guān)的二三事

    摘要:但對(duì)于整個(gè)事件流上的別的元素來說,執(zhí)行順序還會(huì)受到另外一個(gè)因素的影響。以上面的場(chǎng)景為例,在捕獲階段執(zhí)行的事件,如果執(zhí)行,則事件流終止,不會(huì)到達(dá)目標(biāo)階段,的世界則不會(huì)被執(zhí)行執(zhí)行結(jié)果為線上參考事件流 向dom綁定事件的事件的三種方式 行內(nèi)綁定 按鈕 js內(nèi)綁定 btnDom.onclick = function clickHandler() { console.log(click)...

    Anleb 評(píng)論0 收藏0
  • 數(shù)組方法的二三事

    摘要:常用的數(shù)組方法刪除數(shù)組的最后一個(gè)元素,返回被刪除的元素,原數(shù)組長(zhǎng)度減。原數(shù)組發(fā)生了變化,但沒有創(chuàng)建新的數(shù)組。將指定數(shù)組進(jìn)行排序,返回排好序的數(shù)組。顛倒數(shù)組元素的順序,返回逆序后的數(shù)組。 數(shù)組,對(duì)于每一個(gè)前端人員來說是非常常見且重要的數(shù)據(jù)結(jié)構(gòu)之一,也是面試常常出現(xiàn)的題目,掌握數(shù)組的方法能幫助我們更高效地處理問題。不過在數(shù)組的學(xué)習(xí)中,我們常常會(huì)混淆數(shù)組本身的方法和Javascript提供的...

    VincentFF 評(píng)論0 收藏0
  • 前端渲染過程的二三事

    摘要:前端渲染過程的二三事本文不會(huì)介紹整個(gè)前端渲染過程的步驟,只是記錄最近閱讀的文章的些許思考和感悟。那么現(xiàn)在我們可以明白這個(gè)問題的關(guān)鍵所在了,因?yàn)樵诖蟛糠猪?yè)面中是擁有的,而由于其解析順序,那么在事件之前必定已經(jīng)成功構(gòu)造樹。 前端渲染過程的二三事 本文不會(huì)介紹整個(gè)前端渲染過程的步驟,只是記錄最近閱讀的文章的些許思考和感悟。(文章地址一(系列),文章地址二) 希望大家在閱讀這篇文章之前能將上述...

    Rindia 評(píng)論0 收藏0
  • 分表后需要注意的二三事

    摘要:分表字段的選擇。問題產(chǎn)生之前提到在分表應(yīng)用上線前我們需要將原有表的數(shù)據(jù)遷移到新表中,這樣才能保證業(yè)務(wù)不受影響。雖說凌晨的業(yè)務(wù)量下降,但依然有少部分的請(qǐng)求過來,也會(huì)出現(xiàn)各種數(shù)據(jù)庫(kù)異常。 showImg(https://segmentfault.com/img/remote/1460000019462791?w=496&h=285); 前言 本篇是上一篇《一次分表踩坑實(shí)踐的探討》,所以還沒...

    dongxiawu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<