前言

通常,我们采用数值ID(long)/GUID作为全局唯一标识符。

但是,在多线程、高并发情况下,由应用程序生成数值ID容易产生重复,而由数据库生成又会造成性能瓶颈。

而使用Guid.NewGuid()生成的GUID虽然不会重复,但是它是无序的,不适合作为数据库主键,会产生大量索引碎片,影响性能。

有不有什么方法,能生成既是顺序的,又不会重复的全局唯一标识符?

snowflake

大家可能首先想到的是snowflake,Twitter开源的分布式ID生成算法,它会生成一个long型(64bit)的ID。

其中,前41bit是时间戳,接下来的10bit代表机器ID,防止冲突,后12bit代表序列号,以便在同一毫秒内创建多个ID。

但是,机器ID导致了无法去中心化,必须有一个全局生成机器ID的机制作为额外协调。

这时,你可以尝试一下NewId。

NewId

NewId是一个连续ID生成器,它使用主机MAC地址,结合时间戳和递增的序列号实现ID生成策略。

由于MAC地址全局唯一,因此NewId无需机器ID这样的额外设施,即可生成按时间顺序排序的全局唯一标识符。

使用方式非常简单。

首先,引用Nuget包NewId

然后,设置生成标识符时包含processId(进程Id),保证运行在同一台机器上的多个进程生成的标识符不会重复:

NewId.SetProcessIdProvider(new CurrentProcessIdProvider());

最后,生成GUID:

var guid = NewId.NextGuid();

我们尝试了生成多个GUID,发现确实是连续的:

结论

生成顺序GUID又会造成Id容易被猜测,这时,可以结合我们上次的文章(保护我方Id

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

使用C#快速生成顺序GUID相关推荐

  1. staruml顺序图生成协作图_小组课 | Grasshopper分析图的快速生成

    SEMINAR 小组课课程 线上小班化教学:场地分析课程.设计概念课程.基础图纸课程.进阶理论课程.方案表现课程.交互基础课程 上课方式: 相应的小组课QQ群内视频 上课周期: 每个申请年循环2-3次 ...

  2. Emmet语法(快速生成HTML结构语法、快速生成CSS样式语法)

    1. 快速生成HTML结构语法 生成标签直接输入标签名按tab键即可    比如div然后tab键,就可以生成<div></div> 如果想要生成多个相同标签加上*就可以了   ...

  3. 用rapid-framework开源工具快速生成SSH的网站框架MVC模式

    使用开源工具rapid-framework快速搭建ssh项目框架 环境 IDE:myeclipse 8.5 详细搭建过程: 一:打开myeclipse 8.5新建一个web工程,取名web_frame ...

  4. Emmet语法——HTML和CSS快速生成代码/VS code如何快速格式化代码

    前言:本篇文章简单讲述了HTML和CSS中的Emmet语法,更多详细语法内容可以参见此文章 https://code.z01.com/Emmet/ Emmet 语法 Emmet语法的前身是Zen co ...

  5. shader LOD快速生成具体是种怎样的技术?

    shader LOD快速生成具体是种怎样的技术? A System for Rapid, Automatic Shader Level-of-Detail 添加评论 分享 按投票排序按时间排序 4 个 ...

  6. Android Stadio(3)---使用fbc快捷键快速生成findViewById

    AndroidStadio使用fbc快捷键快速生成findViewById AndroidStuidio中在findViewById绑定控件的时候,使用fbc快捷键默认会是第一种的样式,这里介绍如何在 ...

  7. 快速生成HTML结构语法(HTML、CSS)

    快速生成HTML结构语法(HTML.CSS) <!DOCTYPE html> <html lang="en"> <head><meta c ...

  8. CSS引入方法快速生成and复合选择器

    文章目录 一.CSS引入方式 1.内部样式表 2.行内样式表 3.外部样式表 4.综合案例 二.快速生成html结构语法 三.复合选择器 1.后代选择器 2.子选择器 3.并集选择器 4.链接伪类选择 ...

  9. 如何通过批处理实现快速生成文件目录,一键生成文件名和文件夹名目录

    有时候我们整理文件的时候需要列出文件夹里面所有的文件名或者文件夹名,生成一个文件目录,一个个重命名然后复制到word或者记事本的方法显示有点太繁琐了. 网上有一些自动生成文件目录的程序,比如我之前一直 ...

最新文章

  1. mysql表误删回复_mysql 找回误删表的数据方法(必看)
  2. .NET环境下创建Activex (转)
  3. 北斗导航 | 卫星导航基础知识(坐标系)
  4. JavaWordCountCore
  5. html5--3.7 input元素(6)
  6. IDEA Debug 无法进入断点的解决方法
  7. css中的@符号的用处
  8. 4170万元人民币的 绿坝 花季护航 预装1年软件,到底值不值
  9. vyos -vyatta-config-commit save
  10. python青少年编程比赛_有哪些编程比赛适合青少年参加和锻炼的?
  11. 使用JS-SDK自定义微信分享效果
  12. 人均 3.6万行代码, C++ 成最烫手山药:腾讯首度披露技术研发数据!
  13. 谷歌浏览器崩溃、电脑版微信,vscode打不开网页
  14. 老师讲,这是个hin重要的C语言习题
  15. 【Vectorizer.AI】免费将 JPEG 和 PNG 位图转换为 SVG 矢量图
  16. 鸿蒙(HarmonyOS)API的源代码哪去了?竟然全抛出异常,原来使用的是虚拟API【建议收藏】
  17. Lightroom人像磨皮滤镜插件portraiture Mac版
  18. 美文欣赏-------小石潭记
  19. 基于php后台的购物商城微信小程序的设计与实现
  20. 长安渝北工厂机器人_探访长安UNI-T智能工厂,工厂机器人24小时不休

热门文章

  1. 解决php连接mysql数据库中文乱码问题
  2. Qos、Tos、Cos、DSCP
  3. Maven学习笔记(2) --mvn archetype:create 说明
  4. POJ.2774.Long Long Message/SPOJ.1811.LCS(后缀数组 倍增)
  5. XidianOJ 1019 自然数的秘密
  6. BootStrap导航栏的使用
  7. 【BZOJ】【4145】【AMPPZ2014】The Prices
  8. 超越竞争(2) 价值创新
  9. vue-typescript
  10. SublimeText 自带格式化代码功能