下载此文档

[C#]实现序列号生成器.doc


文档分类:IT计算机 | 页数:约3页 举报非法文档有奖
1/3
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/3 下载此文档
文档列表 文档介绍
[C#]实现序列号生成器【转】
对于数据库应用而言, 一个合适的序列号生成器是非常有用的, 用它我们可以方便地给新增的记录的id字段(主键)赋值, 当然我们同样可以用Identity类型主键, 但是假如同时存在父子关系的记录, 那么给子记录赋parent_id就极为不便, 我们必须先将父记录插入到数据库, 然后从数据库中取得自动生成的id, 然后才成给子记录的parent_id字段赋值. 毫无疑问, 假如我们可以给父记录的id直接赋值的话, 问题就简单得多了.
但是, 对于一个分布式应用而言, 不经过周密的考虑往往会带来id重复的问题. 在我们公司既有的产品中采用段号来解决这个问题, 就是说为每个用户分配一个足够长的区间(比如10000000)作为可选id, 每个用户使用独立的区间的id一般不会带来问题, 但是作为一个完美主义者来说, 不能不考虑到一个极端情况, 假如区间重叠了怎么办? 而且这样的分配方式无疑极大地浪费了id资源, 是否有更好的解决方案呢?
    前几天阅读Martin Fowler的大作<Patterns of Enterprise Application Architecture>, 其中提到了一种不错的解决方案, 即使利用键表(key table), 典型的键表有两列: 名字(name)和下一个有效id(nextID). 如果使用数据库唯一键的话, 这个表只有一条记录, 如"DB, 1"; 如果使用表唯一键, 那么对于每个数据库表都有一行数据与之对应, 比如: "Users, 11", "Roles, 31"等等. 我们要获得一个新的可用id, 只需要从一个合适的行中获得nextID值, 然后把nextID + incrementBy存入数据库, 这里每次加上一个incrementBy是为了减少数据库的操作, 避免浪费宝贵的数据库连接资源, 减少冲突发生的可能行.
下的实现(模仿Martin Fowler的大作):
using System;
using ;
using ;
using ;
namespace 
{
public class KeyGenerator
{
private members#region private members
private IDbConnection _connection = null;
private string _keyName;
private int _incrementBy;
private long _nextId = 0;
private long _maxId = 0;
#endregion

public KeyGenerator(IDbConnection conn, string keyName,
  int incrementBy)
{
connection = conn;
_keyName = keyName;
 
_incrementBy = incrementBy;
}
public long NextKey
{

[C#]实现序列号生成器 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数3
  • 收藏数0 收藏
  • 顶次数0
  • 上传人智客网
  • 文件大小0 KB
  • 时间2011-12-27