自己写的一个主键生成器

15 篇文章 0 订阅
数据库主键的选取一直是一个让人比较头疼的问题. 园里子里面的讨论也已经很多了.包括这篇 小议数据库主键选取策略(原创) 还有这篇 数据库主键设计之思考这两篇都是比较优秀的文章, 基本上对几种选取策取作了一些比较,在此基础之上俺也有了一些粗浅的认识,相较之下,自定义的主键还是一个不错的选择,但是在生成方法上有一些考虑,如并发性问题,所以在”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 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值