乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      使用 GUID 值來作為數(shù)據(jù)庫行標識

       Ralf_Jones 2007-01-31

      GUID(Global unique identifier)全局唯一標識符,它是由網(wǎng)卡上的標識數(shù)字(每個網(wǎng)卡都有唯一的標識號)以及 CPU 時鐘的唯一數(shù)字生成的的一個 16 字節(jié)的二進制值。

      GUID 的格式為“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每個 x 是 0-9 或 a-f 范圍內的一個十六進制的數(shù)字。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF 即為有效的 GUID 值。

      世界上的任何兩臺計算機都不會生成重復的 GUID 值。GUID 主要用于在擁有多個節(jié)點、多臺計算機的網(wǎng)絡或系統(tǒng)中,分配必須具有唯一性的標識符。在 Windows 平臺上,GUID 應用非常廣泛:注冊表、類及接口標識、數(shù)據(jù)庫、甚至自動生成的機器名、目錄名等。

      在這次開發(fā) ASP.NET 應用時,我大量使用了類型為 GUID 的 ID 列作為各實體表的關鍵字(鍵)。由于其唯一、易產生的特性,給應用程序處理帶來諸多好處。

      1、在 SQL Server 中使用 GUID

      如果在 SQL Server 的表定義中將列類型指定為 uniqueidentifier,則列的值就為 GUID 類型。

      SQL Server 中的 NewID() 函數(shù)可以產生 GUID 唯一值,使用此函數(shù)的幾種方式如下:

      1) 作為列默認值

      將 uniqueidentifier 的列的默認值設為 NewID(),這樣當新行插入表中時,會自動生成此列 GUID 值。

      2)使用 T-SQL

      在 T-SQL 中使用 NewID()函數(shù),如“INSERT INTO Table(ID,... ) VALUES(NewID(),...)”來生成此列的 GUID 值。

      3)提前獲取 GUID 值

      由于特殊功能需要,需要預先獲知新行的 ID 值,也可以使用如下 C# 代碼提前獲得 GUID 的值,再存儲到數(shù)據(jù)庫中:

       SqlCommand cmd = New SqlCommand();
       cmd.CommandText = "SELECT NewID()";
       string rowID = (string) cmd.ExecuteScalar();
       cmd.CommandText = "INSERT INTO Table(ID,...) VALUES(@ID,...)
       cmd.Parameters.Add("@ID",SqlDbType.UniqueIdentifier).Value = new Guid(rowID);
       cmd.ExecuteNoQuery();

      uniqueidentifier 值不能進行算術運算,但可以進行(意義不大的)比較操作和 NULL 檢查;它不能象 IDENTITY 列一樣,可以獲知每行的增加時間的先后順序,只能通過增加其它時間或時間戳列來完成此功能。

      2、在 .NET 中使用 GUID

      GUID 在 .NET 中使用非常廣泛,而且 .NET Framework 提供了專門 Guid 基礎結構。

      Guid 結構的常用法包括:

      1) Guid.NewGUID()

      生成一個新的 GUID 唯一值

      2) Guid.ToString()

      將 GUID 值轉換成字符串,便于處理

      3)構造函數(shù) Guid(string)

      由 string 生成 Guid 結構,其中string 可以為大寫,也可以為小寫,可以包含兩端的定界符“{}”或“()”,甚至可以省略中間的“-”,Guid 結構的構造函數(shù)有很多,其它構造用法并不常用。

      同時,為了適用數(shù)據(jù)庫中使用 GUID 的需要,.NET Framework 也提供了 SqlGUID 結構,它和 Guid 結構類似,只是兩者對排序(CompareTo)的處理方式不同,SqlGuid 計算值的最后 6 個字節(jié)。而 Guid 計算全部 16 個字節(jié),這種差異可能會給 SQL Server 中 uniqueidentifier 列的排序帶來一定影響,當然這種排序意義也不大。

      .NET Framework 中可以使用類 GuidConverter 提供將 Guid 結構與各種其他表示形式相互轉換的類型轉換器。


      3、GUID 的優(yōu)缺點

      1) 優(yōu)點

      • 同 IDENTITY 列相比,uniqueidentifier 列可以通過 NewID() 函數(shù)提前得知新增加的行 ID,為應用程序的后續(xù)處理提供了很大方便。

      • 便于數(shù)據(jù)庫移植,其它數(shù)據(jù)庫中并不一定具有 IDENTITY 列,而 Guid 列可以作為字符型列轉換到其它數(shù)據(jù)庫中,同時將應用程序中產生的 GUID 值存入數(shù)據(jù)庫,它不會對原有數(shù)據(jù)帶來影響。

      • 便于數(shù)據(jù)庫初始化,如果應用程序要加載一些初始數(shù)據(jù), IDENTITY 列的處理方式就比較麻煩,而 uniqueidentifier 列則無需任何處理,直接用 T-SQL 加載即可。

      • 便于對某些對象或常量進行永久標識,如類的 ClassID,對象的實例標識,UDDI 中的聯(lián)系人、服務接口、tModel標識定義等。

      2) 缺點

      • GUID 值較長,不容易記憶和輸入,而且這個值是隨機、無順序的,所以使用時要注意場合,最好不要嘗試用它來作為你的電子郵件地址 J

      • GUID 的值有 16 個字節(jié),與其它那些諸如 4 字節(jié)的整數(shù)相比要相對大一些。這意味著如果在數(shù)據(jù)庫中使用 uniqueidentifier 鍵,可能會帶來兩方面的消極影響:存儲空間增大;索引時間較慢。


      綜合來說, GUID 的優(yōu)點帶來的便利遠超出其缺點帶來的影響,隨著諸如 WebService 等系統(tǒng)互聯(lián)與整合技術的不斷發(fā)展,其唯一標識的特性使得其應用越來越廣,在您的應用程序中也應考慮使用它了。

      2004年3月23日 10:57 - (閱讀:12011;評論:33)

      評論

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-23 11:39 開心就好
      便于EAI:)

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-23 12:14 南002
      第一句話,使用網(wǎng)絡標示什么的,因為涉嫌暴露秘密而被XX掉了。

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-23 12:25 progame
      我一直納悶的是 如果沒有裝網(wǎng)卡 那么GUID如何生成?

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-23 13:07 JGTM‘2004 [MVP]
      Windows 2000之后已經(jīng)不使用網(wǎng)卡地址作為生成GUID的參數(shù)了,現(xiàn)在用的是第四代算法,使用的是安全子系統(tǒng)的隨機數(shù)生成器(RNG),因此安全性沒有什么問題了。

      @progame:

      如果沒有網(wǎng)卡,系統(tǒng)會使用其它的一些具有隨機特征的數(shù)字作為種子來生成GUID。

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-23 13:23 moslem
      UUIDs and GUIDs (DRAFT) 02/04/98

      Node IDs when no IEEE 802 network card is available

      If a system wants to generate UUIDs but has no IEE 802 compliant
      network card or other source of IEEE 802 addresses, then this section
      describes how to generate one.

      The ideal solution is to obtain a 47 bit cryptographic quality random
      number, and use it as the low 47 bits of the node ID, with the most
      significant bit of the first octet of the node ID set to 1. This bit
      is the unicast/multicast bit, which will never be set in IEEE 802
      addresses obtained from network cards; hence, there can never be a
      conflict between UUIDs generated by machines with and without network
      cards.

      If a system does not have a primitive to generate cryptographic
      quality random numbers, then in most systems there are usually a
      fairly large number of sources of randomness available from which one
      can be generated. Such sources are system specific, but often
      include:

      - the percent of memory in use
      - the size of main memory in bytes
      - the amount of free main memory in bytes
      - the size of the paging or swap file in bytes
      - free bytes of paging or swap file
      - the total size of user virtual address space in bytes
      - the total available user address space bytes
      - the size of boot disk drive in bytes
      - the free disk space on boot drive in bytes
      - the current time
      - the amount of time since the system booted
      - the individual sizes of files in various system directories
      - the creation, last read, and modification times of files in various
      system directories
      - the utilization factors of various system resources (heap, etc.)
      - current mouse cursor position
      - current caret position
      - current number of running processes, threads
      - handles or IDs of the desktop window and the active window
      - the value of stack pointer of the caller
      - the process and thread ID of caller
      - various processor architecture specific performance counters
      (instructions executed, cache misses, TLB misses)

      (Note that it precisely the above kinds of sources of randomness that
      are used to seed cryptographic quality random number generators on
      systems without special hardware for their construction.)

      In addition, items such as the computer‘s name and the name of the
      operating system, while not strictly speaking random, will help
      differentiate the results from those obtained by other systems.

      The exact algorithm to generate a node ID using these data is system
      specific, because both the data available and the functions to obtain

      them are often very system specific. However, assuming that one can
      concatenate all the values from the randomness sources into a buffer,
      and that a cryptographic hash function such as MD5 [3] is available,
      then any 6 bytes of the MD5 hash of the buffer, with the multicast
      bit (the high bit of the first byte) set will be an appropriately
      random node ID.

      Other hash functions, such as SHA-1 [4], can also be used. The only
      requirement is that the result be suitably random _ in the sense that
      the outputs from a set uniformly distributed inputs are themselves
      uniformly distributed, and that a single bit change in the input can
      be expected to cause half of the output bits to change.


      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-23 16:20 jiangsheng
      比較郁悶的是Access里面使用GUID很麻煩

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-24 23:19 色盲
      Hey,堂主,今晚不知不覺又逛到你這來了,再看看這篇文章,發(fā)現(xiàn)昨晚我發(fā)的FEEDBACK被DEL了,好納悶啊。。。我的FEEDBACK沒有非法博客堂的規(guī)章制度,更沒有違法,也沒有任何對你的攻擊啊。。。。只不過是我的觀點和你的不一致而已。
      BLOG意義何在呢?

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-25 9:21 moslem
      TO 色盲:

      我希望多些有意義的反饋,觀點不一致是是可以的,但要說出你自己的理由,說出自己的觀點,不能什么都不說,就“我強烈反對你的觀點,或者根本不能稱為觀點”之類的話,這樣讓人懷疑你的動機。

      希望我們能繼續(xù)共同交流關于 GUID 的一些優(yōu)缺點。



      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-25 18:02 Forks
      Guid.NewGuid()直接可以生成Guid,不需要通過sql server來生成吧,效率不高。

      SqlCommand cmd = New SqlCommand();
      cmd.CommandText = "SELECT NewID()";
      string rowID = (string) cmd.ExecuteScalar();
      cmd.CommandText = "INSERT INTO Table(ID,...) VALUES(@ID,...)
      cmd.Parameters.Add("@ID",SqlDbType.UniqueIdentifier).Value = new Guid(rowID);
      cmd.ExecuteNoQuery();


      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-27 14:06 色盲
      ;)


      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-3-30 12:04 關門放狗
      好文章
      我覺得唯一的缺點就是位數(shù)太長了并且無意義,每個項目,都為Row ID發(fā)愁........

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-4-7 13:28 小莫
      我正在為ASP如何生成GUID煩著了,哪位大大有過這方面的經(jīng)驗

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-4-14 0:16 greysnake
      Guid在應用中的用處大嗎? 這樣的一串隨機數(shù)字不好記憶,也不好應用,不知道用處在什么地方。請指點 。

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-4-15 5:20 moslem
      TO greysnake:

      GUID 主要用在需要永久的,保持唯一的,固定長度的標識上。

      例如,想在網(wǎng)站上發(fā)布新聞,用 news.asp?id=GUID 就可以很好地保持唯一性,如果用整數(shù)的話,會越來越大,不便于管理,而且易被非法利用(如別人可以利用程序自動里從你這里獲取數(shù)據(jù))

      這次 MVP 會議的時候,MS 的自夸,他們就是大量利用 GUID 來保證了網(wǎng)站上不會有鏈接失效(Link break)。

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-4-16 23:19 greysnake
      ok,thx
      明白了。 為了保證應用的唯一性的方法。

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-5-14 9:56 雷俊強
      若把guid列設為主鍵,新增加的行會按guid列的大小插入到表中的相應位置,而不是直接放在最后,當表中的大量的行時,是否影響insert性能(頁分裂)?

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-5-14 10:19 雷俊強
      對這個問題,我以前都是用一個表保存一個int數(shù)據(jù),然后做一個存儲過程來每次加1,這樣需要先知道唯一值時通過這個存儲過程取得它,然后可以再做其他處理。

      這樣int值都是從小到大生成的,且int處理要比string快的多。

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-5-17 15:41 Henry Wu
      什么時候能共享出來學習就好呀

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2004-7-1 21:44 ray_linn
      網(wǎng)卡也不保險,我這里已經(jīng)發(fā)生過幾次供應商刷錯MAC Addres的錯誤了,導致有些網(wǎng)卡的MAC ADDRESS完全一樣。 :(

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2005-1-17 13:50 ccrx
      GUID 無法進行 Count() 等 SQL 計算,這個就不是很方便。

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2005-5-3 18:09 sa
      SA

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2005-5-18 17:07 MA
      dim GuidID as guid = guid.newguid()
      請問為什么我這樣生成的GUIDID會有重復值?

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2005-12-17 18:37 水泓
      GUID是很好的主鍵標識的解決方案,可能有的程序員沒有遇見過系統(tǒng)移植,比如以前我做過一個項目,JAVA+SqlServer架構,因一些原因需將之移植到Linux下,得用JAVA+MySQL,而很要命,在SqlServer中用到了自動編號類型的主鍵,移植中必須將數(shù)據(jù)導入MySQL,遇上很多的刺手問題,還好數(shù)據(jù)庫的數(shù)據(jù)還不是很多,用了程序導入,數(shù)據(jù)庫設計總的來說依據(jù)3范式,所以必須要程序相應解決了數(shù)據(jù)的完整性,最后幸不辱使命。

      整個移植工作完畢之后,考慮了好多在數(shù)據(jù)庫設計階段的思路,總結了一些經(jīng)驗。
      盡量運用各種常用數(shù)據(jù)庫支持的通用的數(shù)據(jù)類型,盡量少用或不用自動編號數(shù)據(jù)庫類型;
      管理員代號+日期+時間+隨機數(shù)并不是很好的解決方案,因為同樣是損失的索引消耗資源,且程序實現(xiàn)反而不如GUID來得干脆;
      不用自動編號字段做主鍵標識時,盡量少用/不用存儲過程根據(jù)表中記錄的Max(XX)獲取當前的最大Int,在你往返查詢-->插入數(shù)據(jù)過程中,時間好象很短,對系統(tǒng)來說已經(jīng)過了很長時間了,可能你獲取了當前應該是100,當你插入數(shù)據(jù)時,已經(jīng)又條佬不知什么時候占了100了,這就存在并發(fā)的問題;
      利用GUID還是解決分布式系統(tǒng)的好方案,在多層分布系統(tǒng)中,多個服務器,多個數(shù)據(jù)庫,如用自動編號,則當你需要匯總數(shù)據(jù)的時候,會發(fā)現(xiàn)麻煩來了,主鍵重復,系統(tǒng)崩潰。

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2006-2-1 11:47 單凱
      獲益匪淺,但仍不知如何使用

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2006-2-14 11:45 小灰
      還是比較迷惑,如果GUID做了索引究竟能比自動增長的效率低多少?還有在開發(fā)的時候要注意哪些問題,樓主沒有交代呀?

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2006-6-16 11:37 五根草
      請教
      STRING 轉換為GUID 的方法

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2006-6-21 16:18 YapEro
      string strIn = "..........";
      Guid guid = new Guid(strIn);

      # 使用 GUID 值來作為數(shù)據(jù)庫行標識(zz) 2006-7-15 9:16 stu_acer
      轉載自:http://blog./moslem/archive/2004/03/23/16930.aspx GUID(Globaluniqueidentifier)全局唯一...

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2006-9-1 13:44 zcj
      同1臺機器產生的guid會相同碼?

      # 使用 GUID 值來作為數(shù)據(jù)庫行標識 2006-9-19 11:35 Scott
      GUID(Global unique identifier)全局唯一標識符,它是由網(wǎng)卡上的標識數(shù)字(每個網(wǎng)卡都有唯一的標識號)以及 CPU 時鐘的唯一數(shù)字生成的的一個 16 字節(jié)的二進制值。

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2006-11-13 23:51 過客
      說一下自已的一點想法:
      (1)對于程序員來說,可能系統(tǒng)移植是很少碰到的,因為開發(fā)系統(tǒng)時應該事先都定好了相關開發(fā)環(huán)境及安裝環(huán)境,環(huán)境改變的情況應該比較少
      (2)引用:便于數(shù)據(jù)庫初始化,如果應用程序要加載一些初始數(shù)據(jù), IDENTITY 列的處理方式就比較麻煩,而 uniqueidentifier 列則無需任何處理,直接用 T-SQL 加載即可
      觀點:不會麻煩,因為SQL SERVER中有一個全局的參數(shù)@@IDENTITY 可以使用,另外水泓所說的數(shù)據(jù)并發(fā)問題,可以用事務來解決這個問題
      (3)幾個問題:1、如果GUID做了索引究竟能比自動增長的效率低多少?
      2、如果是大型的系統(tǒng),如電信、煙草之類的,他們的數(shù)據(jù)庫中的唯一標識字段是否是用GUID?

      # re: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2006-11-14 17:59 llafei
      分布式系統(tǒng)中作為ID應為一個很好的選擇
      我覺得簡單的講應為:如你有一個系統(tǒng),即可聯(lián)機服務器操作,也可脫機服務器工作站操作,并可隨時把脫機數(shù)據(jù)上傳到服務器,也可隨時把服務器的數(shù)據(jù)下載更新到工作站機,那么在關系數(shù)據(jù)表中關聯(lián)ID就需要一個唯一的ID,不論是那個工作站產生的ID,都需唯一,以便相互關聯(lián),在數(shù)據(jù)上傳服務器的庫中也可以用這個ID作為唯一關聯(lián)ID使用,即使數(shù)據(jù)庫合并也不會有ID重復和或關聯(lián)丟失的出現(xiàn).............算了,我是菜鳥,我也講不明白了...只是這樣理解...................

      # 回復: ASP.NET開發(fā)經(jīng)驗(3) --- 使用 GUID 值來作為數(shù)據(jù)庫行標識 2006-11-29 14:17 Cassaba
      可以看看我對幾種ID生成方式的總結
      http://blog.csdn.net/cassaba/archive/2006/11/29/1419798.aspx

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多