安德鲁·阿特金森:Postgres中的短伪随机字母数字标识符

安德鲁·阿特金森:Postgres中的短伪随机字母数字标识符

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

本文介绍了一种在Postgres中生成短的伪随机字母数字标识符public_id的方法,适用于事务或预订,便于用户读取和共享。通过对整数主键id进行模糊处理,生成5个字符的public_id,确保唯一性和难以猜测,尽管插入性能稍慢,但查找效率高。

🎯

关键要点

  • 本文介绍了一种在Postgres中生成短的伪随机字母数字标识符public_id的方法。

  • public_id适用于事务或预订,便于用户读取和共享。

  • public_id是从整数主键id生成的,确保唯一性和难以猜测。

  • public_id的设计目标是固定长度5个字符,且占用空间少于UUID。

  • 使用PL/PgSQL函数对整数进行模糊处理,生成public_id。

  • public_id的生成使用了异或运算和基于62的编码。

  • 创建transactions表时,public_id列使用生成的身份列作为输入。

  • public_id列具有唯一性和非空约束,确保数据的完整性。

  • 插入数据时,使用public_id会使写入操作变慢约3.4倍。

  • 与随机值相比,public_id保持可排序性,查找效率高。

🔎

延伸解读

public_id的设计优势

public_id的设计旨在提高用户体验,尤其是在事务和预订场景中。与UUID相比,public_id的长度仅为5个字符,便于用户记忆和分享,同时也减少了存储空间的占用。这种设计使得在数据库中存储和检索数据时更加高效,尤其是在需要频繁访问的情况下。

性能权衡

尽管使用public_id会使插入操作变慢约3.4倍,但这种性能损失在许多应用场景中是可以接受的。特别是在需要高效查找的情况下,public_id的可排序性和索引支持能够显著提高查询效率。因此,在设计数据库时,需要权衡插入性能与查询性能之间的关系。

未来的扩展可能性

文章提到未来可能的扩展包括支持大小写不敏感和修改输入字母表等功能。这些改进将进一步增强public_id的灵活性和适用性,尤其是在需要处理多种字符集的应用中。开发者在实施时应考虑这些潜在的扩展,以满足更广泛的需求。

延伸问答

如何在Postgres中生成短的伪随机字母数字标识符?

可以通过对整数主键id进行模糊处理,使用PL/PgSQL函数生成5个字符的public_id。

public_id的主要用途是什么?

public_id适用于事务或预订,便于用户读取和共享。

使用public_id会对插入性能产生什么影响?

使用public_id会使写入操作变慢约3.4倍。

public_id是如何确保唯一性的?

public_id列具有唯一性和非空约束,确保数据的完整性。

public_id的设计目标是什么?

public_id的设计目标是固定长度5个字符,且占用空间少于UUID。

如何将整数转换为public_id?

通过使用异或运算和基于62的编码,将整数转换为public_id。

🏷️

标签

➡️

继续阅读