标识符 ID 是我们作为软件工程师再熟悉不过的字段和概念了,我们经常打交道的 MySQL 就经常使用 ID 作为主键,ID 在软件工程甚至生活中都是一个非常常见的概念,我们为什么总是需要在业务或者系统中引入『无意义』的 ID 呢,在这里先来看两个有意义的 ID:
- 日常生活中使用的 18 位身份证号;
- 支付票据上面的 20191002XXXXXXX;
概述我们首先需要解决的问题是 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 通信等场景,我们可以将这一问题归结到两个原因上:
- 需要通过唯一的标识符对数据或者事件进行识别或者去重;
- 只有无意义的标识符才会绝对唯一的,任何携带其他信息的标识都可能重复;
文章插图
我们在之前的系列文章 为什么 TCP 建立连接需要三次握手 提到的 TCP 连接中的序列号也是一个唯一的标识符,它能够帮助我们判断对数据进行去重,保证应用层的协议不会收到异常的数据包,这些场景都需要用到标识符的唯一性,唯一性为我们带来的就是精确识别对象的能力 。
在与网络相关的场景下,使用唯一 ID 的例子非常普遍,假如我们想通过支付宝或者微信的 API 向其他人发起一笔转账,如果这次请求发生了超时,那么我的这笔转账请求到底有没有被处理呢?
文章插图
当前的节点对于这笔转账请求的结果是不知道的,如果这时重新请求可能会发生二次转账这类严重的问题,但是如果不重新请求,转账可能没有生效,这时如果我们引入一个无意义的 ID 来帮助接收方识别请求的唯一性就能很好地解决这个问题:
- 如果接收方已经成功处理 ID 对应的请求,那么就直接返回;
- 如果接收方没有处理 ID 对应的请求,就正常进行处理;
除了在不稳定的网络中,数据库也包含 ID 标识符这一概念,我们在数据库中往往叫做主键,它在一般情况下都是一个递增的唯一整数,绝大多数的表都会使用 ID 作为表的主键来保证数据的唯一性,当我们想要对数据进行增删改查等操作时,使用主键 ID 查询数据也是性能最优并且最不容易出现问题的做法 。
无意义无意义的意思其实就是 ID 中不应该包含任何与具体场景或者业务相关的内容,包含这些内容并不是不可以,只是一旦出现这些内容,要么 ID 重复的可能性会增加,这很可能对我们的业务逻辑造成比较严重的影响,以我们的身份证号为例,它的 18 位数字(或符号)大多都是有意义的 。
推荐阅读
- 情绪对人体免疫力的影响
- 世界上木质最硬的树 铁桦树有多硬
- 收藏|10个实用的珠宝行业术语,知道6个以上的都是行家。
- 全棉、纯棉、精梳棉、针织棉棉料的区别
- 为什么你长得好看却不上镜?
- 梦到树林里有各种不同的鸟 梦见一群鸟在树上
- 自动挡上坡,动力不足该如何换挡?换不好有可能车毁人亡?
- 世界上所有的犀牛种类 世界上有多少种犀牛
- 不花钱就能解决的25个汽车故障,建议收藏!
- 梦到坐船在水上行驶水里有许多鱼 梦到坐船在水上游玩