问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Nano ID for PostgreSQL:高效唯一标识符生成神器

创作时间:
2025-01-21 20:12:26
作者:
@小白创作中心

Nano ID for PostgreSQL:高效唯一标识符生成神器

在数据库系统中,唯一标识符(Unique Identifier)是确保数据完整性和一致性的关键组件。无论是作为主键还是外键,一个高效、安全且节省空间的唯一标识符生成方案都是开发者追求的目标。近年来,Nano ID作为一种新型的唯一标识符生成器,凭借其卓越的性能和安全性,逐渐成为开发者的新宠。本文将深入探讨Nano ID for PostgreSQL的实现原理、优势及其应用场景。

01

Nano ID vs UUID:一场性能与空间的革命

在介绍Nano ID之前,我们先来看看传统的UUID(Universally Unique Identifier)。UUID是一种在分布式网络环境中创建唯一标识符的标准方法,广泛应用于各种软件开发场景。然而,随着系统规模的不断扩大和性能要求的日益提高,UUID逐渐暴露出一些不足:

  • 空间占用大:标准的UUID由36个字符组成,包括32个十六进制数字和4个短横线,这在存储空间有限的场景下显得尤为奢侈。
  • 生成效率低:UUID的生成过程相对复杂,尤其是在高并发场景下,其性能瓶颈愈发明显。

Nano ID正是为了解决这些问题而诞生的。它具有以下显著优势:

  • 体积更小:Nano ID使用更大的字母表(A-Za-z0-9_-),将随机位从UUID的122位提升到126位,但ID长度却从36个字符缩短到21个字符,节省了近42%的存储空间。
  • 性能更优:Nano ID的代码量仅为UUID的四分之一(130字节 vs 483字节),生成速度更是快两倍。在基准测试中,Nano ID达到了5,616,592 ops/sec,而UUID仅为1,535,753 ops/sec。
  • 安全性更高:Nano ID使用硬件随机生成器,通过Node.js的crypto模块和浏览器的Web Crypto API,确保了标识符的不可预测性和均匀分布。
02

在PostgreSQL中实现Nano ID

要在PostgreSQL中使用Nano ID,首先需要创建pgcrypto扩展,这是Nano ID生成随机数的基础。执行以下SQL语句:

CREATE EXTENSION IF NOT EXISTS pgcrypto;

接下来,创建Nano ID的函数。这个函数将生成一个默认长度为21个字符的唯一标识符:

CREATE OR REPLACE FUNCTION public.nanoid(size integer default 21)
 RETURNS text
 LANGUAGE plpgsql
 STABLE
AS $function$
DECLARE
  id text := '';
  i int := 0;
  urlalphabet char(64) := '_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
BEGIN
  FOR i IN 1..size LOOP
    id := id || substr(urlalphabet, (random() * 64 + 1)::integer, 1);
  END LOOP;
  RETURN id;
END;
$function$;

有了这个函数,你就可以在创建表时直接使用Nano ID作为主键:

CREATE TABLE my_table (
  id text PRIMARY KEY DEFAULT nanoid(),
  name text NOT NULL,
  created_at timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
);
03

Nano ID的应用场景

Nano ID的这些特性使其在多个场景中都能发挥重要作用:

  1. 数据库主键:Nano ID的唯一性和安全性使其成为主键的理想选择。特别是在需要跨数据库或跨系统的唯一标识时,Nano ID的优势更加明显。

  2. 短链接服务:由于Nano ID的长度较短且具有良好的随机性,非常适合用于生成短链接的唯一标识符。

  3. 分布式系统中的全局唯一标识符:在分布式系统中,生成全局唯一的标识符是一个挑战。Nano ID的高并发性能和低冲突概率使其成为这一场景的完美解决方案。

04

结语

Nano ID for PostgreSQL的出现,为数据库开发者提供了一个高效、安全且节省空间的唯一标识符生成方案。无论是从性能还是从存储成本的角度考虑,Nano ID都展现出了明显的优势。对于追求卓越性能和成本效益的开发者来说,Nano ID无疑是一个值得尝试的新选择。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号