写点什么

为什么总是需要无意义的 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:33774

评论

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

挑战 30 天学完 Python:Day16 时间datetime

MegaQi

挑战30天学完Python 三周年连更

在 Python 中如何使用 format 函数?

海拥(haiyong.site)

三周年连更

为什么 Go for-range 的 value 值地址每次都一样?

AlwaysBeta

Go 面试

OpenGL入门二:绘制三角形

轻口味

opengl 图形图像 三周年连更

Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投

股市老人

这 30 个工具和服务可以更好地监控和管理 Linux 服务器,很全面!

wljslmz

三周年连更

一文读懂Stable Diffusion教程,搭载高性能PC集群,实现生成式AI应用

GPU算力

平凡而不凡,那些用键盘改变世界的“新型劳动者”

开放原子开源基金会

开放原子全球开源峰会

Intelligent Enterprise 和 企业数字化转型的关联关系

汪子熙

人工智能 数字化管理 三周年连更

IT组织架构之反思

agnostic

IT组织

【Python实战】Python中parsel两种获取数据方式

BROKEN

三周年连更

【愚公系列】用友系列之YonBuilder低代码平台概论和基本使用

愚公搬代码

【程序猿未来之路】作为互联网技术人的“我们”该如何破局 | 社区征文

洛神灬殇

4月日更 AIGC 三周年征文 三周年连更 生存指南

五款提高程序员生产效率的ChatGPT神器,你一定不要错过!

cwang

Code Review Git Commit ChatGPT GPT-4 Prompt

2023-04-30:用go语言重写ffmpeg的resampling_audio.c示例,它实现了音频重采样的功能。

福大大架构师每日一题

Go 音视频 ffmpeg 流媒体 福大大

云服务管理技术

阿泽🧸

三周年连更 云服务管理

通过ChatGPT快速学习英语

石云升

AI ChatGPT 三周年连更

OpenGL入门三:变换原理简介

轻口味

opengl 三周年连更

云环境下的新型IT运维体系

穿过生命散发芬芳

运维体系 三周年连更

Mac 电脑解决无法使用uiautomator viewer的问题

IT蜗壳-Tango

三周年连更

文心一言 VS chatgpt (13)-- 算法导论3.1 8题 3.2 1题

福大大架构师每日一题

福大大 ChatGPT 文心一言

《人生第一次》有感

后台技术汇

三周年连更

一文了解Spring Framework 5 新 Web 框架:Spring WebFlux

Java架构历程

三周年连更

设计一个即时群聊天系统软件(采用华为云ECS服务器作为云服务端 )

DS小龙哥

三周年连更

Matlab实现周期卷积

袁袁袁袁满

三周年征文

Nautilus Chain 测试网第二阶段,推出忠诚度计划及广泛空投

西柚子

推荐一款基于Vue3的移动H5模板,加速你的移动应用开发

cwang

前端 vant Vue 3 Web H5

Go 为什么不支持可重入锁?

乌龟哥哥

三周年连更

为什么老有人想让我们“程序员”失业? | 社区征文

se7en

三周年征文

再来一篇,Go+Vue前后端分离设计实践

闫同学

三周年连更

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