【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

评论

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

sql注入竟然把我们的系统搞挂了,怎么办?

苏三说技术

java安全

最新版gradle安装使用简介

程序那些事

Gradle 程序那些事 构建工具 build 打包工具

【LeetCode】盒子中小球的最大数量

Albert

算法 LeetCode 2月春节不断更

OpenCV--平移与旋转

IT蜗壳-Tango

七日更 2月春节不断更

百度大脑 EasyEdge 推出端云协同服务,大幅提升本地部署模型迭代效率

百度大脑

2 期架构师训练营 - 第八周作业与总结

云飞扬

架构师训练营第2期

2 期架构师训练营 - 第九周作业与总结

云飞扬

架构师训练营第2期

《未来呼啸而来》- 技术改变生活

石云升

2月春节不断更 技术改变生活 未来呼啸而来

阅读笔记:Python A-Z 技巧

小匚

Python 读书笔记 日常思考

产品经理训练营--第四周作业

月亮 😝

kafka的实现原理

八两

kafka Kafka知识点 kafka实现原理 kafka架构

2 期架构师训练营 - 第六周作业与总结

云飞扬

架构师训练营第2期

5G花式过年指南

脑极体

如何在数据库中进行RBAC权限应用

BinTools图尔兹

数据库 权限管理 数据管理 rbac

注册中心 Nacos 异常实例需要30s才能剔除 Nacos心跳时间设置(踩坑)

laker

Spring Cloud nacos spring cloud alibaba

Linux Lab 进阶: Rootfs 文件系统 &Linux 与 Uboot 调试

贾献华

Linux Linux Kenel rootfs uboot usb

日记 2021年2月7日(周日)

Changing Lin

个人感悟 2月春节不断更

2 期架构师训练营 - 第七周作业与总结

云飞扬

架构师训练营第2期

话题讨论 | 新年将至, 程序员如何以代码送出新春祝福

孙叫兽

Java 程序员 大前端 话题讨论 新春祝福

2 期架构师训练营 - 第三周学习总结

云飞扬

架构师训练营第2期

物流系统抢单简单设计

DL

Java函数式编程Stream.collect()为什么这么受欢迎?

码农架构

Java 架构 函数式编程

图文详解网络基础知识

【Python】给PDF添加水印

AXYZdong

Python 2月春节不断更

尝试从用户的角度思考(PO的姿势)

Bruce Talk

Scrum 敏捷开发 Agile Product Owner

驱动力读书笔记之五

张老蔫

28天写作

浪潮云洲:从工业互联网实践想开去

浪潮云

工业互联网

第十一周 安全稳定 作业 「架构师训练营 3 期」

胡云飞

容器 & 服务:Jenkins本地及docker安装部署

程序员架构进阶

容器 jenkins 七日更 28天写作 2月春节不断更

百度大脑 EasyData 智能数据服务平台上线文本数据清洗功能

百度大脑

2 期架构师训练营 - 第四周作业与总结

云飞扬

架构师训练营第2期

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