2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

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

评论

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

PD 启动主流程分析

TiDB 社区干货传送门

TiDB 底层架构

还在用变量去实现多维度分组排序吗?你 out 了!

TiDB 社区干货传送门

实践案例

TiSpark 服务安装、部署及测试

TiDB 社区干货传送门

TiDB 的统计信息

TiDB 社区干货传送门

【精选实践】一体化无边界的大数据基础平台

TiDB 社区干货传送门

TiDB 集群可用性增强 —— TiDB 5.0 的 Joint Consensus 机制介绍

TiDB 社区干货传送门

TiDB 底层架构

DM filter 实践整理

TiDB 社区干货传送门

实践案例

TiDB Parser模块的简单解读与改造方法

TiDB 社区干货传送门

TiDB 底层架构

TiDB 热点问题定位

TiDB 社区干货传送门

故障排查/诊断

TiDB 热点问题详解

TiDB 社区干货传送门

当数据库遇上 Kuberbetes丨「能量钛」圆桌论坛回顾

TiDB 社区干货传送门

实践案例 数据库架构选型

从 MySQL 大量数据清洗到 TiDB 说起

TiDB 社区干货传送门

实践案例

一张脑图让你快速了解 TiDB 5.0版本新特性

TiDB 社区干货传送门

TiDB 底层架构

PD 调度器模块

TiDB 社区干货传送门

TiDB 底层架构

DM多库合并至TiDB

TiDB 社区干货传送门

迁移 实践案例

Region 创建、分裂及合并的原理

TiDB 社区干货传送门

知乎已读服务的前世今生与未来

TiDB 社区干货传送门

038-拯救大兵瑞恩之 TiDB 如何在 TiKV 损坏的情况下恢复

TiDB 社区干货传送门

TiDB 升级——ansible与tiup使用小结

TiDB 社区干货传送门

TiDB 底层架构

接触TiDB4.0时,一些部署方式实践尝试

TiDB 社区干货传送门

安装 & 部署

TiDB 慢日志在伴鱼的实践

TiDB 社区干货传送门

实践案例

解读 TiDB Server

TiDB 社区干货传送门

TiDB 3.0:窗口函数初体验

TiDB 社区干货传送门

Grafana汇总报表

TiDB 社区干货传送门

监控

在 minikube 上使用 TiDB Operator 构建 TiDB 集群(持续更新中)

TiDB 社区干货传送门

安装 & 部署

TiDB Ansible 使用指南

TiDB 社区干货传送门

TiDB 数据一致性校验实现:Sync-diff-inspector 优化方案

TiDB 社区干货传送门

性能调优

事务前沿研究丨确定性事务

TiDB 社区干货传送门

TiDB 底层架构

TiDB 在汽车之家818台网互动项目中的应用

TiDB 社区干货传送门

实践案例 管理与运维 数据库架构选型

TiDB new feature max_execution_time

TiDB 社区干货传送门

Flink on TiDB —— 便捷可靠的实时数据业务支撑

TiDB 社区干货传送门

实践案例

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