自己寫的一個主鍵產生器

來源:互聯網
上載者:User
資料庫主鍵的選取一直是一個讓人比較頭疼的問題. 園裡子裡面的討論也已經很多了.包括這篇小議資料庫主鍵選取策略(原創) 還有這篇資料庫主鍵設計之思考這兩篇都是比較優秀的文章, 基本上對幾種選取策取作了一些比較,在此基礎之上俺也有了一些粗淺的認識,相較之下,自訂的主鍵還是一個不錯的選擇,但是在產生方法上有一些考慮,如並發性問題,所以在”Max+1“和"自製加1"的方案中將相關編號存放於資料庫中不是一樣太好的方案, 結合這兩種方案提供的思路於是乎俺就寫了這樣一個C#主鍵發生器:
1. 為了避免線程衝突而採用了單件模式來產生主鍵,並將上一個主鍵存放起來,以免產生重複的主鍵。

2. 欄位類型採用定長字元型,如char(20), 產生的字串前面還可以加上不同的首碼,比如表首碼或者其它一些有意義的標識符.

3. 轉化成字母的十六進位類型是為了讓最後的長度更小一些.

請大家參考: 1 using System;
 2 using System.Collections.Generic;
 3 using System.Text;
 4 
 5 namespace GB.Core
 6 {
 7     /// <summary>
 8     /// Powered By 沙加, matin0728@gmail.com, QQ5364241
 9     /// </summary>
10     public class IdentityGenerator
11     {
12         static long lastIdentity = 0;
13         static IdentityGenerator o = new IdentityGenerator();
14         public static IdentityGenerator Instance
15         {
16             get
17             {
18                 if (o != null)
19                     return o;
20                 else
21                     return new IdentityGenerator();
22             }
23         }
24         public string NextIdentity()
25         {
26             long idint = DateTime.Now.Ticks - new DateTime(2000, 11, 1).Ticks;
27 
28             while (lastIdentity >= idint)
29             {
30                 idint++;
31             }
32             lastIdentity = idint;
33 
34             return Convert.ToString(idint, 16);
35         }
36     }
37 }
38 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.