写点什么

为什么总是需要无意义的 ID?

  • 2019-12-27
  • 本文字数:1072 字

    阅读完需:约 4 分钟

为什么总是需要无意义的 ID?

为什么这么设计(Why’s THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点、对具体实现造成的影响。如果你有想要了解的问题,可以在文章下面留言。


标识符 ID 是我们作为软件工程师再熟悉不过的字段和概念了,我们经常打交道的 MySQL 就经常使用 ID 作为主键,ID 在软件工程甚至生活中都是一个非常常见的概念,我们为什么总是需要在业务或者系统中引入『无意义』的 ID 呢,在这里先来看两个有意义的 ID:


  • 日常生活中使用的 18 位身份证号;

  • 支付票据上面的 20191002XXXXXXX


上述的两个 ID 是否会有重复的可能?这对于今天想要分析和讨论的事情密切相关,在这篇文章中作者就会分析『为什么总是需要无意义的 ID』。

概述

我们首先需要解决的问题是 ID 到底是什么,ID 一般会被认为是 identifier 的缩写,在 Wikipedia 上我们能够找到这样的定义:


An identifier is a name that identifies (that is, labels the identity of) either a unique object or a unique class of objects, where the “object” or class may be an idea, physical [countable] object (or class thereof), or physical [noncountable] substance (or class thereof). The abbreviation ID often refers to identity, identification (the process of identifying), or an identifier (that is, an instance of identification). An identifier may be a word, number, letter, symbol, or any combination of those.


标识符(identifier)就是一个可以唯一识别一个对象或者物体的名称,被识别的对象可能是一些想法、物理上可数的对象或者物理上的不可数物质。它的前缀 ID 经常被用来表示身份、鉴定过程或者标识符,其中的标识符可能是一个单词、数字、字母、符号或者上述元素的任意组合。


在标识符的定义中我们需要特别注意的是『唯一』这个词,这个词是其定义中最关键的信息,标识符一定能够帮助我们识别唯一一个的对象或者物体,如果它不能实现这个作用,就不是标识符。唯一这个词帮助我们确定了标识符的特性,也为我们后面的分析过程铺平了道路。

设计

在这一节中我们将开始分析为什么很多业务或者场景中都需要一个唯一 ID,例如:消息队列、TCP 通信等场景,我们可以将这一问题归结到两个原因上:


  • 需要通过唯一的标识符对数据或者事件进行识别或者去重;

  • 只有无意义的标识符才会绝对唯一的,任何携带其他信息的标识都可能重复;


本文转载自 Draveness 技术博客。


原文链接:https://draveness.me/whys-the-design-meaningless-identifier


2019-12-27 11:33934

评论

发布
暂无评论
发现更多内容

诚邀报名丨首期OpenHarmony开发者成长计划分享日

OpenHarmony开发者

OpenHarmony

如何在面试中机智的展现架构能力?

非凸科技

rust 编程语言 量化 构架师 互联网大厂

如何优化前端页面的LCP?

BUG侦探

前端 性能 网页指标

华为18级大牛整理总结:微服务设计和分布式服务框架原理实践文档

爱好编程进阶

Java 面试 后端开发

你知道Java是如何解决可见性和有序性问题的吗?

爱好编程进阶

Java 面试 后端开发

单例模式你不得不知道的底层原理

爱好编程进阶

Java 面试 后端开发

CDF全球调查:软件交付性能停滞不前

飞算JavaAI开发助手

4.25解锁OpenHarmony技术日!年度盛会,即将揭幕!

Anna

手机硬件都有哪些

InfoQ IT百科

洞见科技首批通过央行国家金融科技测评中心「联邦学习」产品评测,实现「MPC+FL」金融应用双认证

洞见科技

联邦学习 隐私计算 多方安全计算

Oceanbase 和 TiDB 粗浅对比之 - 执行计划

TiDB 社区干货传送门

为拿几家大厂Offer,“闭关修炼

爱好编程进阶

Java 面试 后端开发

为什么手机操作系统开始向多端融合方向发展

InfoQ IT百科

别找了,这是迄今为止把微服务讲的最清楚的一篇!没有之一

爱好编程进阶

Java 面试 后端开发

未来手机操作系统有哪些发展趋势

InfoQ IT百科

手机拍照算法和硬件哪个更重要

InfoQ IT百科

netty系列之:netty中常用的字符串编码解码器

程序那些事

Java Netty 程序那些事 4月月更

终于有人讲明白了!原来这才是全球低时延一张网技术

华为云开发者联盟

音视频 华为云 实时音视频 低时延

刚拿的字节跳动offer“打水漂”

爱好编程进阶

Java 面试 后端开发

不同研发协作模式在云效中的应用

阿里云云效

云计算 阿里云 云原生 研发 研发协作

观测云登陆阿里云计算巢,共建ISV新生态

观测云

可观测性 可观测

未来的手机操作系统在智能化上会有哪些突破

InfoQ IT百科

18张图,详解SpringBoot解析yml全流程

码农参上

springboot 配置文件 4月月更

为什么switch里的case没有break不行

爱好编程进阶

Java 面试 后端开发

手机软硬件协同很重要吗?

InfoQ IT百科

你必须懂也可以懂的微服务系列三:服务调用

爱好编程进阶

Java 面试 后端开发

开发手机操作系统的难度有多大

InfoQ IT百科

手机硬件性能的发展主要受哪几方面制约

InfoQ IT百科

【高并发】为何在32位多核CPU上执行long型变量的写操作会出现诡异的Bug问题?看完这篇我懂了!

冰河

并发编程 多线程 协程 异步编程 精通高并发系列

LAXCUS分布式操作系统冗余容错之节点篇

LAXCUS分布式操作系统

分布式系统 冗余 集群容灾

移动平台WorkPlus集成化办公,打造企业全场景业务生态

BeeWorks

为什么总是需要无意义的 ID?_语言 & 开发_Draveness_InfoQ精选文章