.NET的snowflake

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

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


image.png

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

/// <summary>
/// 获取long型的唯一ID
/// </summary>
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还是很长的,稍微需要大一丢丢的存储空间。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容