使用C#快速生成顺序GUID

前言

通常,我们采用数值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,发现确实是连续的:

70d224b0fd4dc3f23809598e2982ddba.png

结论

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297130.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

带你见识世界的5部纪录片(免费领取)

全世界只有3.14 % 的人关注了爆炸吧知识纪录片一直都是增长见识又带给你力量的东西,你可能忙于学业、生活、工作而不能行万里路,但至少你还可以看纪录片,从一方屏幕看到整个世界。今天就为大家整理了5部高分纪录片,文末附领取方式…

Android简明开发教程二十一:访问Internet 绘制在线地图

在例子Android简明开发教程十七:Dialog 显示图像 中我们留了一个例子DrawMap()没有实现,这个例子显示在线地图,目前大部分地图服务器都是将地图以图片存储以提高响应速度。 一般大小为256X256个像素。具体可以参见离线地图下载方法解析 。 比…

url采集工具_大数据关键技术浅谈之大数据采集

在前几篇文章中,企通查为大家介绍了大数据处理的基本流程。从大数据的一系列处理过程中(抽取、集成、分析、解释),我们可以发现这一整套流程中涵盖了数据存储、处理、应用等多方面的技术。大数据价值的完美体现需要多种技术的协同…

使用 WPF + Chrome 内核实现 在线客服系统 的复合客服端程序

本系列文章详细介绍使用 .net core 和 WPF 开发 升讯威在线客服与营销系统 的过程。本产品已经成熟稳定并投入商用。免费使用 & 私有化部署免费下载:https://docs.shengxunwei.com/Post/f7bc8496-14ee-4a53-07b4-08d8e3da6269视频实拍:演示升讯威在线…

abp框架java,【Net】ABP框架学习之正面硬钢

前言本文介绍另一种学习ABP框架的方法,该方法为正面硬钢学习法。。。我们不去官网下载模板,直接引用DLL,直接使用。WebApi项目创建首先创建一个WebApi项目,结构如下。然后Nuget搜索ABP,安装ABP框架。(我这里安装的是5.…

不同对象的通话是时长​

1 一个专门为某人打造的形容词2 当代人的手机铃声3 “可以吃宵夜吗”“不行” 4 好可爱!!!5 这不是道具,是真的红酒杯里倒着红酒叠在硬币上!6 这14个未接电话就很有灵性了!7 你觉得以下哪个事件给你的痛苦感…

poj 1088 滑雪 详解

http://poj.org/problem?id1088 这是一道dp入门题,不过我一直没想明白应该怎么dp。今天,在做自己学校oj的算法基础题时看到这题,标注着dp的分类,加上我一直都比较喜欢做dp题,于是我就决心今晚要把这道入门题切了。 题…

python find函数_Python 速学!不懂怎么入门python的小白看这篇就够了!

Python是一种非常流行的脚本语言,而且功能非常强大,几乎可以做任何事情,比如爬虫、网络工具、科学计算、树莓派、Web开发、游戏等各方面都可以派上用场。同时无论在哪种平台上,都可以用 Python 进行系统编程。本文讨论基本的 Pyth…

前端开发的盛宴

想写这篇文章由来已久,目的是想回顾一下基于Web技术的开发技术和流程的变迁,以及其背后的原因或规律。我依然记得,很多年前做出来第一个公司网站时的激动心情(加班到晚上,兴奋地在空旷的办公室走来走去)&am…

datav本地部署 java,Spring Boot对Spring Data JPA的自动配置

一 点睛Spring Boot对Spring Data JPA的自动配置放置在如下路径:二 源码分析1 JpaRepositoriesAutoConfiguration类分析ConfigurationConditionalOnBean(DataSource.class)ConditionalOnClass(JpaRepository.class)ConditionalOnMissingBean({ JpaRepositoryFactory…

靠拿奖学金完成学业后,博士生为女友放弃年薪30万工作选择留校任教

全世界只有3.14 % 的人关注了爆炸吧知识“相恋八年,一路陪伴。研究生毕业后,博士生决定为女友放弃年薪30万的工作选择留校任教,因为曾和女友约定一起当老师。好的科研爱情,或许就是这样携手前进。索长友是哈尔滨理工大学的博士生&…

小菜学设计模式——观察者模式

2019独角兽企业重金招聘Python工程师标准>>> 背景 上一次去看电影院看电影,半旁边的妹子说只要扫一扫就能免费领取爆米花一份,你说我怎么躲得过妹子的招数呢?所以拿起我的手机,扫一扫,注册会员&#xf…

获取 子文件夹 后缀_CSDN学院第一个Ptython Homework-- 递归统计文件夹大小

作业:通过第一周学习的内容,自主编写一个py文件,能够递归文件夹大小,并将统计后的大小进行格式化输出.作业体现形式:以代码的方式保存成后缀为py的脚本.作业的注意事项:1.文件名命名规范.2.注释清晰.3.运行结果符合预期效果 .思路提示:1.使用python内置的os模块来进行文件相关的…

java 链表逆序 递归,java用递归和非递归实现链表逆序

传统的逆序链表方法是使用三个指针来记录节点的状态,防止链表断裂。Node节点public class Node {private int data;private Node next;public Node(int data){this.data data;next null;}public int getData() {return this.data;}public void setData(int data) …

史上最硬核老师:17年间,拿着菜刀把400个混混送进了哈佛耶鲁麻省!

全世界只有3.14 % 的人关注了爆炸吧知识今天,来给大家介绍一位硬核教师Jaime Escalante——手握杰斐逊奖、自由精神奖,拿着菜刀把400个混混送进了哈佛耶鲁麻省。海梅斯埃斯卡兰特(Jaime Escalante)初出茅庐1930年12月31日,Jaime出生于玻利维亚…

数据库表设计

数据库表设计 分析上述各实体的属性集,从中找出关系的主键,然后用关系式来表示实体(其中下划线的属性为主键)。表4-1至表4-5分别给出了主要表结构各实体的属性如下: 表4-1 admin 表名称 主要字段 数据类型 长度 属性 输入方式 描述 …

抓包写代码模拟怎么减少重复劳动

由于工作需要会经常需要Fiddler抓包Chrome F12抓包然后根据抓包写代码来模拟,一般来说我都是先抓包,打开postman把抓来的包放到postman里面模拟请求然后利用PostMan的生成代码功能大部分的Reponse都是Json,为了方反列化接着要打开一个在线工具…

机械史上最复杂的巅峰之作,这才是最强大脑!

全世界只有3.14 % 的人关注了爆炸吧知识今天我们来认识一下机械史上最强大脑:英国数学家查尔斯巴贝奇,他是可编程计算机的发明者,计算机的先驱。他设计过的计算机器有差分机、分析机和第二个差分机。差分机可谓是机械史最复杂的巅峰之作。在英…

mybatis-plus 会自动增加 order by_python自动撸支付宝基金答题红包

python自动撸支付宝基金答题红包背景在一个套利撸羊毛群里,一群小伙伴每天在不懈地撸支付宝的基金红包,于是自己也加入了撸红包大军。于是就重复地在不同的基金里面,看有没有答题红包,有的话就点进去,回答一个及其容易…

C# WPF文本框TextEdit不以科学计数法显示

01—前言一个float或者double类型的数值,如果小数点后0的个数≥4,在界面上就会自动以科学计数法显示,比如:0.00003会显示成这样但是很多时候我并不希望它这样显示,因为这样不方便编辑,和界面其它数据格式也…