.NET的snowflake

一般情况下,我们是使用自增长ID来做主键ID的。也有些哥们,是使用GUID来作为主键ID(本人并不建议采用GUID,主键一般是表的聚集索引,如果用了GUID做主键,每次insert会导致磁盘的移动,以及存储page的分裂,导致存储碎片)。
而用主键ID会导致“只有Insert完后,才能知道ID号”。

这里提供一种方案,就是 .NET版的snowflake,它会提供给你一个唯一的long型的整数,让你可以作为ID使用。
1.使用nuget引入dll:


image.png

2.编写一个获取ID的类:

/// 
/// 获取long型的唯一ID
/// 
public class IdUtils
{
    // 这里必须单例,才能保证ID唯一
    // 不同功能用不同的workerId,可以更能保证ID唯一
    private static IdWorker worker = new IdWorker(1, 1);

    public static long getId()
    {
        return worker.NextId();
    }

}

后续所有程序,只有调用getId(),就能获取到一个唯一的ID,用于insert到数据库,这么看来,这还是很方便的。缺点是相比自增长ID,这ID还是很长的,稍微需要大一丢丢的存储空间。

你可能感兴趣的:(.NET的snowflake)