当前位置: 首页 > news >正文

分布式唯一Id,它比GUID好

分布式唯一Id,它比GUID好


一、前言

分布式唯一Id,顾名思义,是指在全世界任何一台计算机上都不会重复的唯一Id。

在单机/单服务器/单数据库的小型应用中,不需要用到这类东西。但在高并发、海量数据、大型分布式应用中,分布式唯一Id却是构建整个系统的最核心一环。

二、场景

在某个大型电商系统A中,“订单”这类大数据(比如,每天产生2000万条订单)必定不会存储在1台数据库服务器中,而是分布式的存储在多台数据库服务器组成的一个集群中(比如,1000台数据库服务器组成一个集群)。由于海量数据+高并发等特性时常会伴随“订单”发生,所以,如何确保订单Id在整个系统中唯一不重复,已经有些设计难度了。

若此时,另外一家公司的电商系统B,要与你家的电商系统A合并(甚至还有更多公司的C、D、E、等等),那么这些系统合并时订单Id出现重复的概率是很大的。要把这些重复修改成唯一,又会要费一番不小的改造功夫,十分麻烦…

但是,若我们一开始就使用分布式唯一Id来实现订单Id,则不会有这些麻烦,一切迎刃而解,且十分轻松…

三、方案

DeveloperSharp包中,提供了完善的分布式唯一Id生成工具

使用示例如下:

若是在.Net Core环境下

//从NuGet引用DeveloperSharp包 
using DeveloperSharp.Framework.CoreUtility; //首先在Startup.cs或Program.cs文件中进行工具预载   
Services.AddTransient<IUtility, Utility>();//IU是在相关文件中,通过依赖注入方式获取的IUtility类型对象   
var Id = IU.GenerateId("Order");//产生分布式唯一Id

若是在.Net Framework环境下

//从NuGet引用DeveloperSharp包
using DeveloperSharp.Framework.CoreUtility;IUtility IU = new Utility();     
var Id = IU.GenerateId("Order");//产生分布式唯一Id

说明:

  1. “分布式唯一Id”的长度较长,具有全球唯一性,最早起源于facebook、twitter的应用。
  2. “分布式唯一Id”比GUID更好。GUID偶尔还是会有重复出现,而且它是无序的,会导致数据库查询性能下降,而“分布式唯一Id”是相对有序的。

经验:

其实,无论是单机小型应用,还是多机大型分布式应用,从今天开始,你都应采用“分布式唯一Id”作为数据库中、每个表的“主键”。因为与所谓可读性、长短、自增Id比起来,它的扩展性好太多、太多…

相关文章:

分布式唯一Id,它比GUID好

分布式唯一Id&#xff0c;它比GUID好 一、前言 分布式唯一Id&#xff0c;顾名思义&#xff0c;是指在全世界任何一台计算机上都不会重复的唯一Id。 在单机/单服务器/单数据库的小型应用中&#xff0c;不需要用到这类东西。但在高并发、海量数据、大型分布式应用中&#xff0c…...

计算机服务器中了勒索病毒怎么解决,勒索病毒解密流程,数据恢复

计算机服务器中了勒索病毒是一件非常令人头疼的事情&#xff0c;勒索病毒不仅会加密企业服务器中的数据&#xff0c;还会对企业计算机系统带来损害&#xff0c;严重地影响了企业的正常运转。最近&#xff0c;云天数据恢复中心工程师总结了&#xff0c;今年以来网络上流行的勒索…...

【NPM】vuex 数据持久化库 vuex-persistedstate

在 GitHub 上找到&#xff1a;vuex-persistedstate。 安装 npm install --save vuex-persistedstate使用 import { createStore } from "vuex"; import createPersistedState from "vuex-persistedstate";const store createStore({// ...plugins: [cr…...

英语——分享篇——每日200词——2601-2800

2601——resistant——[rɪzɪstənt]——adj.抵抗的——resistant——resi热死(拼音)st石头(拼音)ant蚂蚁(熟词)——热死了石头上的蚂蚁还在抵抗——The body may be less resistant if it is cold. ——天冷时&#xff0c;身体的抵抗力会下降。 2602——prospect——[prɒspe…...

SpringCloud-Sentinel

一、介绍 &#xff08;1&#xff09;提供界面配置配置服务限流、服务降级、服务熔断 &#xff08;2&#xff09;SentinelResource的blockHandler只处理后台配置的异常&#xff0c;运行时异常fallBack处理&#xff0c;且资源名为value时才生效&#xff0c;走兜底方法 二、安装…...

为什么索引要用B+树来实现呢,而不是B树

首先&#xff0c;常规的数据库存储引擎&#xff0c;一般都是采用 B 树或者 B树来实现索引的存储。 B树 因为 B 树是一种多路平衡树&#xff0c;用这种存储结构来存储大量数据&#xff0c;它的整个高度会相比二叉树来说&#xff0c;会矮很多。 而对于数据库来说&#xff0c;所有…...

使用vue3前端开发的一些知识点

Vue 3 是一种流行的 JavaScript 框架&#xff0c;用于构建用户界面。它是 Vue.js 框架的第三个主要版本&#xff0c;具有许多新特性和性能改进。下面是 Vue 3 的一些常用语法和概念的详细介绍&#xff1a; 创建 Vue 实例&#xff1a; 在 Vue 3 中&#xff0c;你可以通过创建一个…...

零基础Linux_20(进程信号)内核态和用户态+处理信号+不可重入函数+volatile

目录 1. 内核态和用户态 1.1 内核态和用户态概念 1.2 内核态和用户态转化 2. 处理信号 2.2 捕捉信号 2.2 系统调用sigaction 3. 不可重入函数 4. volatile关键字 5. SIGCHLD信号&#xff08;了解&#xff09; 6. 笔试选择题 答案及解析 本篇完。 1. 内核态和用户态…...

vite+vue3+elementPlus+less+router+pinia+axios

1.创建项目2.按需引入elementplus3.引入less安装vue-router安装 axios安装 piniapinia的持久化配置(用于把数据放在localStorage中)---另外增加的配置 1.创建项目 npm init vitelatest2.按需引入elementplus npm install element-plus --save//按需引入 npm install -D unpl…...

VMwarePlayer安装Ubuntu,切换中文并安装中文输入法

1.下载和安装 虚拟机使用的免费版官网链接&#xff1a;VMwarePlayer Ubuntu镜像下载官网链接&#xff1a;Ubuntu桌面版 自己学习使用&#xff0c;不需要考虑迁移之类的。选择单个磁盘IO性能会更高 安装过程中如果出现如下报错&#xff0c;则用系统管理员身份运行 右击VMwa…...

C# JSON转为实体类和List,以及结合使用

引用 using Newtonsoft.Json;using Newtonsoft.Json.Linq;JSON转实体类 public class Person {public string Name { get; set; }public int Age { get; set; }public string Gender { get; set; } }string jsonStr "{\"name\": \"Tom\", \"a…...

使用TensorRT-LLM进行高性能推理

LLM的火爆之后&#xff0c;英伟达(NVIDIA)也发布了其相关的推理加速引擎TensorRT-LLM。TensorRT是nvidia家的一款高性能深度学习推理SDK。此SDK包含深度学习推理优化器和运行环境,可为深度学习推理应用提供低延迟和高吞吐量。而TensorRT-LLM是在TensorRT基础上针对大模型进一步…...

怎么去别人的github工程下载

1、网络 确保网络能够顺利访问github&#xff0c;有的地方的公共网络不能访问github&#xff0c;我之前开过科学上网的会员&#xff0c;发现没必要特意开去访问它。可以直接开手机热点&#xff0c;一般是可以顺利访问的。 2、下载 以我的github开源笔记qq-hh/C_review (gith…...

【java基础-实战3】list遍历时删除元素的方法

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 在实际的业务开发中&#xff0c;容器的遍历可以说是非…...

云计算与云服务

云计算与云服务 1、云计算与云服务概述2、云服务模式(IaaS、PaaS、SaaS、DaaS)3、公有云、私有云和混合云1、云计算与云服务概述 什么是云计算? “云”实质上就是一个网络,狭义上讲,云计算就是一种提供资源的网络,使用者可以随时获取“云”上的资源,按需求量使用,并且…...

Ubuntu20.4 设置代理

主要是涉及2个代理 涉及apt 可以在、/etc/apt/apt.conf 中进行修改 在系统全局可以在/etc/profile中进行修改...

RustDay06------Exercise[71-80]

71.box的使用 说实话这题没太看懂.敲了个模板跟着提示就过了 // box1.rs // // At compile time, Rust needs to know how much space a type takes up. This // becomes problematic for recursive types, where a value can have as part of // itself another value of th…...

Leetcode—2525.根据规则将箱子分类【简单】

2023每日刷题&#xff08;五&#xff09; Leetcode—2525.根据规则将箱子分类 实现代码 char * categorizeBox(int length, int width, int height, int mass){long long volume;long long len (long long)length;long long wid (long long)width;long long heig (long lo…...

RustDay05------Exercise[51-60]

51.使用?当作错误处理符 ? 是 Rust 中的错误处理操作符。通常用于尝试解析或执行可能失败的操作&#xff0c;并在出现错误时提前返回错误&#xff0c;以避免程序崩溃或出现未处理的错误。 具体来说&#xff0c;? 用于处理 Result 或 Option 类型的返回值。 // errors2.rs…...

hdlbits系列verilog解答(或非门)-07

文章目录 wire线网类型介绍一、问题描述二、verilog源码三、仿真结果 wire线网类型介绍 wire线网类型是verilog的一种数据类型&#xff0c;它是一种单向的物理连线。它可以是输入也可以是输出&#xff0c;它与reg寄存器数据类型不同&#xff0c;它不能存储数据&#xff0c;只能…...

FPGA新手必看:如何用74HC595级联驱动数码管(附完整Verilog代码)

FPGA实战&#xff1a;74HC595级联驱动数码管的完整设计与优化 第一次接触FPGA和74HC595时&#xff0c;我被这个小小的芯片惊艳到了——它竟然能用3个引脚控制8位数码管&#xff01;但真正动手实现时&#xff0c;却遇到了各种时序问题和显示乱码。本文将分享我从零开始实现74HC5…...

图的基本遍历DFS与BFS

1. 引言 图是一种非常重要的数据结构&#xff0c;广泛应用于社交网络、地图导航、网页链接分析等领域。图的遍历是最基础的操作之一&#xff0c;主要有两种方式&#xff1a; 深度优先搜索 (Depth First Search, DFS) —— 沿着一条路径走到底&#xff0c;再回溯。广度优先搜索 …...

如何用AI智能助手彻底改变你的文献管理:Zotero-GPT终极指南

如何用AI智能助手彻底改变你的文献管理&#xff1a;Zotero-GPT终极指南 【免费下载链接】zotero-gpt GPT Meet Zotero. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-gpt 还在为海量文献阅读而头疼吗&#xff1f;每天花费数小时阅读论文摘要&#xff0c;手动整理…...

form-create-designer进阶玩法:结合CodeMirror实现表单JSON的版本管理与团队协作

form-create-designer团队协作实战&#xff1a;构建企业级表单配置中心 在大型前端项目中&#xff0c;表单往往是业务逻辑最密集、变更最频繁的部分。传统开发模式下&#xff0c;每次表单调整都需要前端工程师手动修改代码&#xff0c;既低效又容易出错。form-create-designer通…...

明日方舟自动化助手MAA:从入门到精通的完整游戏辅助指南

明日方舟自动化助手MAA&#xff1a;从入门到精通的完整游戏辅助指南 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手&#xff0c;全日常一键长草&#xff01;| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https://g…...

终极指南:5分钟掌握ComfyUI-BiRefNet-ZHO,轻松实现专业级图像视频抠图

终极指南&#xff1a;5分钟掌握ComfyUI-BiRefNet-ZHO&#xff0c;轻松实现专业级图像视频抠图 【免费下载链接】ComfyUI-BiRefNet-ZHO Better version for BiRefNet in ComfyUI | Both img & video 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-BiRefNet-ZHO …...

Redis监控与故障排除:5个必备工具和诊断方法

Redis监控与故障排除&#xff1a;5个必备工具和诊断方法 【免费下载链接】redis-doc Redis documentation source code for markdown and metadata files, conversion scripts, and so forth 项目地址: https://gitcode.com/gh_mirrors/re/redis-doc Redis作为高性能的内…...

从正点原子LCD换到大彩串口屏:一个STM32F407老鸟的硬件连接与电平避坑实录

从正点原子LCD换到大彩串口屏&#xff1a;一个STM32F407老鸟的硬件连接与电平避坑实录 作为一名长期使用STM32F407的开发者&#xff0c;正点原子的LCD屏幕陪伴了我无数个项目。但当GPIO资源开始捉襟见肘时&#xff0c;我意识到是时候寻找更高效的显示解决方案了。大彩串口屏以其…...

保姆级教程:用Python脚本自动转换JD9365A初始化代码为RK3568设备树格式

Python自动化实战&#xff1a;JD9365A初始化代码转RK3568设备树全解析 当面对嵌入式Linux驱动开发时&#xff0c;最令人头疼的莫过于那些冗长而重复的寄存器配置工作。以JD9365A这款MIPI屏幕驱动芯片为例&#xff0c;其初始化代码往往包含上百条寄存器操作命令&#xff0c;手动…...

3分钟搞定演唱会门票:大麦网抢票脚本让你告别抢票焦虑

3分钟搞定演唱会门票&#xff1a;大麦网抢票脚本让你告别抢票焦虑 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为抢不到心仪的演唱会门票而烦恼吗&#xff1f;每次开票瞬间秒光&#xff0…...