You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DynamoDB如何实现‘Display ID(显示ID)’模式?

实现用户友好型短ID的可行方案

我有如下DynamoDB文档:

hashKey: "PROJECT:1edb63f3-eb2d-6798-baba-0242ac120005"
name: "My Project"
createdAt: 2023-01-01

当前API通过以下方式获取项目:

GET /api/v1/projects/1edb63f3-eb2d-6798-baba-0242ac120005

现在需要更短、易分享的ID用于GET请求,以下是你提出的两种方案的可行性分析:

方案1:压缩原ID为短字符串

这个方案完全可行,核心是用可逆编码算法把长UUID转换成更紧凑的字符串,具体操作思路:

  • 先去掉UUID中的-,得到32位十六进制字符串
  • 将十六进制转成二进制后,用Base64或Base58(剔除0、O、l、I这类易混淆字符)编码
  • 解码时反向操作:把短字符串还原成原UUID,再拼接PROJECT:前缀即可定位到DynamoDB的hashKey

举个例子,原UUID去掉-后是1edb63f3eb2d6798baba0242ac120005,用Base64编码后会缩短到22位左右,Base58的长度相近,且更适合人类阅读分享。

需要注意:

  • 确保编码后的字符串URL安全,可将Base64中的+和/替换为-和_,避免URL转义问题
  • 无需额外存储,仅在API层做编码解码即可,对现有DynamoDB结构无侵入

方案2:添加displayId字段并建立映射

这个方案同样可行,并不繁琐,适合需要自定义ID(比如自增序列、语义化ID)的场景:

  • 在DynamoDB文档中新增displayId字段,值可以是自增数字、自定义短字符串(如项目缩写+数字)
  • 为了通过displayId快速定位原hashKey,需在DynamoDB中创建全局二级索引(GSI),将displayId设为GSI的hashKey,查询时直接用displayId检索GSI就能拿到对应的原hashKey
  • 若使用自增序列,因DynamoDB无原生自增功能,可单独建表存储计数器,创建项目时先获取自增ID,再写入主表和GSI

优势

  • ID可完全自定义,比如用proj-123这类直观格式
  • 解码逻辑简单,直接查询GSI即可,无需复杂的编码转换

劣势

  • 需要额外维护GSI和可能的计数器表,增加少量存储与操作成本
  • 若允许用户自定义displayId,需处理重复值问题,要做唯一性校验

总结

  • 若只需要无侵入、快速实现的短ID,优先选方案1,编码解码逻辑简单,无需修改数据库结构
  • 若需要自定义语义化ID或担心编码后的字符串不够直观,选方案2,虽有少量维护成本,但灵活性更高

内容的提问来源于stack exchange,提问作者Mojimi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 08:33:20