大咖直播-鸿蒙原生开发与智能提效实战!>>> 了解详情
写点什么

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

评论

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

从实习到秋招成为一名安全工程师,我经历了什么

网络安全学海

面试 网络安全 信息安全 渗透测试 WEB安全

Spring AOP(一) AOP基本概念

程序员历小冰

spring aop 28天写作 12月日更

微信业务架构图&&“学生管理系统”毕业架构设计

guodongq

「架构实战营」

Week1学习总结

guodongq

「架构实战营」

Rust 元宇宙 15 —— 细节和重构

Miracle

rust 元宇宙

技术架构演进的思考

gevin

架构演进

透过全球首个知识增强千亿大模型,看到中国AI差异化发展之路

脑极体

云ERP系统究竟是什么?

低代码小观

流程管理 ERP 业务流程管理 业务流程自动化

消费类电子线上问题定位,分析和解决落地

wood

硬件产品 28天写作 线上故障

彻底弄懂死锁

李子捌

Java、 28天写作 12月日更

模块一作业

whoami

「架构实战营」

架构实战营三期--模块一作业

木几丶

架构实战营 #架构实战营

TypeScript 之 Class(下)

冴羽

JavaScript typescript 翻译 大前端

Hoo虎符研究院 | Arweave调研报告

区块链前沿News

Arweave Hoo虎符 虎符交易所 虎符研究院 去中心化存储

第一周作业

lv

我粗心,有救吗?

Justin

心理学 成长 28天写作

学习总结

Anlumina

「架构实战营」

架构实战营模块1课后作业

墨宝

如何验证你的产品创意?

石云升

产品思维 28天写作 12月日更

GrowingIO Terraform 实践

GrowingIO技术专栏

运维 SRE Terraform 项目实践 资源编排

我所理解的微服务

gevin

微服务 微服务架构

「从0到1如何快速实现cli工具」

速冻鱼

大前端 cli JavaScrip 签约计划第二季 12月日更

第一模块作业

Anlumina

「架构实战营」

微信业务架构图&学生管理系统毕业架构设计

Spring

架构实战营

记录-今年最骄傲的一件事(2)

将军-技术演讲力教练

基于云的技术架构设计实践-第5篇

hackstoic

数据分析 云原生 数据可视化 业务分析 签约计划第二季

Python Qt GUI设计:菜单栏、工具栏和状态栏的使用方法(拓展篇—2)

不脱发的程序猿

Python qt GUI设计 Qt Creator 菜单栏、工具栏、状态栏

毕业总结

小智

架构训练营

架构实战营-模块1-作业

Pyel

「架构实战营」

Git 报错:unable to update local ref

liuzhen007

28天写作 12月日更

日本公司诚招IT开发技术者

马农驾驾驾

Java c++ php Python 日语

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