隨筆-128  評(píng)論-55  文章-5  trackbacks-0

          UUID

          通用惟一標(biāo)識(shí)符(UUID)是128位比特的數(shù)字,用來(lái)惟一地標(biāo)識(shí)因特網(wǎng)上的某些對(duì)象或者實(shí)體。

          A Universally Unique Identifier is an identifier standard used in software construction, standardized by the Open Software Foundation (OSF) as part of the Distributed Computing Environment (DCE). The intent of UUIDs is to enable distributed systems to uniquely identify information without significant central coordination. Thus, anyone can create a UUID and use it to identify something with reasonable confidence that the identifier will never be unintentionally used by anyone for anything else. Information labelled with UUIDs can therefore be later combined into a single database without need to resolve name conflicts. The most widespread use of this standard is in Microsoft's Globally Unique Identifiers (GUIDs) which implement this standard.

          一個(gè)UUID 是一個(gè)標(biāo)識(shí)符標(biāo)準(zhǔn)用于軟件架構(gòu),是由開(kāi)放軟件基金會(huì)(OSF)作為分布式計(jì)算環(huán)境(DCE)的一部分而制定的標(biāo)準(zhǔn)。UUIDs的目的就是使分布式系統(tǒng)可以不需要重要的中央調(diào)合系統(tǒng)而能唯一地標(biāo)識(shí)信息。這樣,任何人能創(chuàng)造一個(gè)UUID 和使用它來(lái)標(biāo)識(shí)一些東西,而且,你有足夠的信心來(lái)確定這個(gè)標(biāo)識(shí)是永遠(yuǎn)不會(huì)被任何人無(wú)意地使用在任何東西上。因此,信息加上了UUID標(biāo)簽就能合并到單個(gè)數(shù)據(jù)庫(kù)中而不用去解決命名沖突的問(wèn)題。這個(gè)標(biāo)準(zhǔn)的廣泛應(yīng)用在微軟的全球唯一標(biāo)識(shí)符(GUIDs)上,GUID實(shí)現(xiàn)了這個(gè)標(biāo)準(zhǔn)。

          A UUID is essentially a 16-byte number and in its canonical form a UUID may look like this:

          :550E8400-E29B-11D4-A716-446655440000

          And has this structure in the C programming language:

          typedef struct {
          unsigned32 time_low;
          unsigned16 time_mid;
          unsigned16 time_hi_and_version;
          unsigned8 clock_seq_hi_and_reserved;
          unsigned8 clock_seq_low;
          byte node6;
          } uuid_t;

          The J2SE 5.0 release of Java provides a class that will produce 128-bit UUIDs. The API documentation for the class refers to ISO/IEC 11578:1996.

          關(guān)于UUID的定義,詳細(xì)內(nèi)容可參考http://www.ietf.org/rfc/rfc4122.txt,文檔里面還有C語(yǔ)言對(duì)UUID標(biāo)準(zhǔn)的各種實(shí)現(xiàn)。

          GUID

          A Globally Unique Identifier or GUID is a pseudo-random number used in software applications. While each generated GUID is not guaranteed to be unique, the total number of unique keys (2128 or 3.4028×1038) is so large that the possibility of the same number being generated twice is very small.

          一個(gè)全球唯一標(biāo)識(shí)符 或 GUID 是一個(gè)假隨機(jī)數(shù)用于軟件中。雖然每個(gè)產(chǎn)生的GUID是不保證唯一的,但不同的標(biāo)識(shí)符總數(shù)是(2128 也就是3.4028×1038)如此之大,以至于相同的數(shù)字被產(chǎn)生兩次的機(jī)率是很相當(dāng)小的。

          The GUID is an implementation by Microsoft of a standard called Universally Unique Identifier (UUID), specified by the Open Software Foundation (OSF).

          GUID 是微軟對(duì)UUID這個(gè)標(biāo)準(zhǔn)的實(shí)現(xiàn)。UUID是由開(kāi)放軟件基金會(huì)(OSF)定義的。

          UUID還有其它各種實(shí)現(xiàn),不止GUID一種,其它的在此不詳細(xì)說(shuō)明。

           

          本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/nidehong/archive/2006/11/22/1406125.aspx


          ---------------------

          http://blog.csdn.net/happyflystone/archive/2007/11/27/1903854.aspx

          UUID是是128位整數(shù)(16字節(jié))的全局唯一標(biāo)識(shí)符(Universally Unique Identifier),指在一臺(tái)機(jī)器上生成的數(shù)字,它保證對(duì)在同一時(shí)空中的所有機(jī)器都是唯一的。通常平臺(tái)會(huì)提供生成UUID的API。UUID按照開(kāi)放軟件基金會(huì)(OSF)制定的標(biāo)準(zhǔn)計(jì)算,用到了以太網(wǎng)卡地址、納秒級(jí)時(shí)間、芯片ID碼和許多可能的數(shù)字。由以下幾部分的組合:當(dāng)前日期和時(shí)間(UUID的第一個(gè)部分與時(shí)間有關(guān),如果你在生成一個(gè)UUID之后,過(guò)幾秒又生成一個(gè)UUID,則第一個(gè)部分不同,其余相同),時(shí)鐘序列,全局唯一的IEEE機(jī)器識(shí)別號(hào)(如果有網(wǎng)卡,從網(wǎng)卡獲得,沒(méi)有網(wǎng)卡以其他方式獲得),UUID的唯一缺陷在于生成的結(jié)果串會(huì)比較長(zhǎng)。關(guān)于UUID這個(gè)標(biāo)準(zhǔn)使用最普遍的是微軟的GUID(Globals Unique Identifiers)。

          UUID,其格式為:xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxxxxxx(8-4-4-16),其中每個(gè) x 是 0-9 或 a-f 范圍內(nèi)的一個(gè)十六進(jìn)制的數(shù)字。而標(biāo)準(zhǔn)的UUID格式為:xxxxxxxx-xxxx-xxxx-xxxxxx-xxxxxxxxxx (8-4-4-4-12)

                 在建立數(shù)據(jù)庫(kù)的時(shí)候,需要為每張表指定一個(gè)主鍵,所謂主鍵就是能夠唯一標(biāo)識(shí)表中某一行的屬性或?qū)傩越M,一個(gè)表只能有一個(gè)主鍵,但可以有多個(gè)候選索引。因?yàn)橹麈I可以唯一標(biāo)識(shí)某一行記錄,所以可以確保執(zhí)行數(shù)據(jù)更新、刪除的時(shí)候不會(huì)出現(xiàn)張冠李戴的錯(cuò)誤。數(shù)據(jù)庫(kù)的主鍵生成有多種方式,每種方式都有其優(yōu)點(diǎn)和缺點(diǎn),應(yīng)該根據(jù)不同的需求在主鍵的時(shí)間和空間效率上做平衡折中,從而選擇不同的主鍵生成策略。歸納起來(lái),對(duì)主鍵的選擇主要有以下四種方式:

          1.     自動(dòng)增長(zhǎng)字段

                   自動(dòng)增長(zhǎng)型字段允許我們?cè)谙驍?shù)據(jù)庫(kù)添加數(shù)據(jù)時(shí),不考慮主鍵的取值,記錄插入后,數(shù)據(jù)庫(kù)系統(tǒng)會(huì)自動(dòng)為其分配一個(gè)值,確保絕對(duì)不會(huì)出現(xiàn)重復(fù)。

          2.     手動(dòng)增長(zhǎng)字段

                   手動(dòng)增長(zhǎng)型的字段,也就是說(shuō)主鍵的值需要自己維護(hù),通常情況下需要建立一張單獨(dú)的表存儲(chǔ)當(dāng)前主鍵鍵值。

          3.     GUID類(lèi)型

                   GUID是Globally Unique IDentifier的縮寫(xiě),是一個(gè)128位的隨機(jī)數(shù),并保證不產(chǎn)生重復(fù)。

          4.     COMB類(lèi)型

                   COMB(combine)型可以理解為一種改進(jìn)的GUID,它通過(guò)組合GUID和系統(tǒng)時(shí)間,以使其在索引和檢索事有更優(yōu)的性能。

           

          COMB數(shù)據(jù)類(lèi)型的基本設(shè)計(jì)思路是這樣的:既然GUID數(shù)據(jù)因毫無(wú)規(guī)律可言造成索引效率低下,影響了系統(tǒng)的性能,那么能不能通過(guò)組合的方式,保留GUID的10個(gè)字節(jié),用另6個(gè)字節(jié)表示GUID生成的時(shí)間(DateTime),這樣我們將時(shí)間信息與GUID組合起來(lái),在保留GUID的唯一性的同時(shí)增加了有序性,以此來(lái)提高索引效率。


          下面轉(zhuǎn)自:溫少,首發(fā)于博客園

          替代方案之一,就是使用關(guān)系數(shù)據(jù)庫(kù)的自增長(zhǎng)字段,自增長(zhǎng)字段的一個(gè)問(wèn)題是,無(wú)法預(yù)先創(chuàng)建一個(gè)ID,只能夠在保存的時(shí)候才能生成ID,這對(duì)于批量關(guān)聯(lián)插入數(shù)據(jù)來(lái)說(shuō),不滿足需求。

          替代方案之二,就是使用一個(gè)記錄ID的表,每次加一,在事務(wù)中使用Select FOR UPDATE來(lái)讀取然后UPDATE SET FVALUE = FVALUE + 1,或者使用我之前文章中所提到的CAS算法。 這樣做,會(huì)導(dǎo)致性能低下,每生成一個(gè)ID的成本都很高。

          替代方案之三,就是把ID分成兩部分,Seed和IncrementID。Seed采用上面的方案二或者其他辦法生成,IncrementID使用一個(gè)AtomicInteger來(lái)每次遞增生成。SEED轉(zhuǎn)化為九進(jìn)制數(shù)字,這樣SEED就不會(huì)包含9,于是使用9作為分隔符,把SEED和IncrementID隔開(kāi)。這樣做,就可以做高性能產(chǎn)生ID,而且確保不重復(fù)。甚至可以更進(jìn)一步,SEED由一個(gè)中心服務(wù)器生成。使用9個(gè)分隔符號(hào)隔開(kāi)SEED和IncrementID,好處是SEED是變長(zhǎng),而不是使用固定位數(shù)來(lái)保存SEED,這樣產(chǎn)生的ID會(huì)更短,可讀性更好。

          舉例,34915,其中34時(shí)SEED,15是IncrementID,9是分隔符,SEED部分采用九進(jìn)制表示法,確保不出現(xiàn)9,第一個(gè)9之后的內(nèi)容屬于IncrementID。

           


          本文來(lái)自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/happyflystone/archive/2007/11/27/1903854.aspx



          Author: orangelizq
          email: orangelizq@163.com

          歡迎大家訪問(wèn)我的個(gè)人網(wǎng)站 萌萌的IT人
          posted on 2009-09-05 15:22 桔子汁 閱讀(3339) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): other
          主站蜘蛛池模板: 呼和浩特市| 南宫市| 临夏县| 清新县| 寻乌县| 普洱| 阿尔山市| 邯郸市| 晋州市| 冕宁县| 竹北市| 通海县| 灯塔市| 九龙城区| 互助| 瓮安县| 富裕县| 贡觉县| 玉山县| 阳江市| 任丘市| 临沭县| 页游| 肇州县| 兖州市| 逊克县| 雷州市| 龙胜| 台东市| 隆德县| 固原市| 潮州市| 桂平市| 凭祥市| 隆回县| 大连市| 寿阳县| 庄浪县| 金沙县| 依安县| 佛学|