当前位置:网站首页>换掉UUID,NanoID更快更安全!
换掉UUID,NanoID更快更安全!
2022-07-01 16:42:00 【Java笔记虾】
点击关注公众号,利用碎片时间学习
UUID 是软件开发中最常用的通用标识符之一。然而,在过去的几年里,其他的竞品挑战了它的存在。
其中,NanoID 是 UUID 的主要竞争对手之一。
因此,在本文中,我们将展开讨论 NanoID 的功能、它的亮点以及它的局限性,以便让我们更好地了解何时使用它。
了解 NanoID 及其用法
对于 JavaScript,生成 UUID 或 NanoID 都非常简单。它们都有对应的 NPM 包来帮助我们实现生成。
我们所需要做的就是运行 npm i nanoid
命令安装 NanoID NPM 库 并在我们的项目中使用它:
import { nanoid } from 'nanoid';
model.id = nanoid();
你是否知道 NanoID 每周的 NPM 下载量超过 1175.4 万,并且运行起来比 UUID 快 60%?
此外,NanoID 比 UUID 年轻了将近 7 年,而且它的 GitHub 星数已经比 UUID 多。
下图显示了这两个之间的 npm 趋势比较,我们可以看到 NanoID 的上升趋势与 UUID 的平坦进展有强烈的对比。

我希望这些数字已经说服你去尝试 NanoID。
但是,这两者之间的主要区别很简单。它归结为键使用的字母表。
由于 NanoID 使用比 UUID 更大的字母表,因此较短的 ID 可以用于与较长的 UUID 相同的目的。
1. NanoID 只有 108 个字节那么大
与 UUID 不同,NanoID 的大小要小 4.5 倍,并且没有任何依赖关系。此外,大小限制已用于将大小从另外 35% 减小。
大小减少直接影响数据的大小。例如,使用 NanoID 的对象小而紧凑,能够用于数据传输和存储。随着应用程序的增长,这些数字变得明显起来。
2. 更安全
在大多数随机生成器中,它们使用不安全的 Math.random()
。但是,NanoID 使用 crypto module
和 Web Crypto API
,意味着 NanoID 更安全。
此外,NanoID 在 ID 生成器的实现过程中使用了自己的算法,称为 统一算法,而不是使用“随机 % 字母表” random % alphabet
。
3. 它既快速又紧凑
NanoID 比 UUID 快 60%。与 UUID 字母表中的 36 个字符不同,NanoID 只有 21 个字符。
0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz-
此外,NanoID 支持 14 种不同的编程语言,它们分别是:
C#、C++、Clojure 和 ClojureScript、Crystal、Dart & Flutter、Deno、Go、Elixir、Haskell、Janet、Java、Nim、Perl、PHP、带字典的 Python、Ruby、Rust、Swift
4. 兼容性
它还支持 PouchDB、CouchDB WebWorkers、Rollup 以及 React 和 Reach-Native 等库。
我们可以使用 npx nanoid
在终端中获得唯一 ID。在 JavaScript 中使用 NanoID 唯一的要求是要先安装 NodeJS。

此外,我们还可以在 Redux toolkit 中找到 NanoID,并将其用于其他用例,如下所示;
import { nanoid } from ‘@reduxjs/toolkit’
console.log(nanoid()) //‘dgPXxUz_6fWIQBD8XmiSy’
5. 自定义字母
NanoID 的另一个现有功能是它允许开发人员使用自定义字母表。我们可以更改文字或 id 的大小,如下所示:
import { customAlphabet } from 'nanoid';
const nanoid = customAlphabet('ABCDEF1234567890', 12);
model.id = nanoid();
在上面的示例中,我将自定义字母表定义为 ABCDEF1234567890
,并将 Id 的大小定义为 12。
6. 没有第三方依赖
由于 NanoID 不依赖任何第三方依赖,随着时间的推移,它能够变得更加稳定自治。
从长远来看,这有利于优化包的大小,并使其不太容易出现依赖项带来的问题。
局限性和未来重点
根据 StackOverflow 中的许多专家意见,使用 NanoID 没有明显的缺点或限制。
非人类可读是许多开发人员在 NanoID 中看到的主要缺点,因为它使调试变得更加困难。但是,与 UUID 相比,NanoID 更短且可读。
另外,如果你使用 NanoID 作为表的主键,如果你使用相同的列作为聚集索引也会出现问题。这是因为 NanoID 不是连续的。
在将来……
NanoID 正逐渐成为 JavaScript 最受欢迎的唯一 id 生成器,大多数开发人员更喜欢选择它而不是更喜欢 UUID。

上述基准测试显示了 NanoID 与其他主要 id 生成器相比的性能。
使用默认字母表每秒可生成超过 220 万个唯一 ID,使用自定义字母表每秒可生成超过 180 万个唯一 ID。
根据我使用 UUID 和 NanoID 的经验,考虑到它的小尺寸、URL 友好性、安全性和速度,我建议在任何未来的项目中使用 NanoID 而不是 UUID。
因此,我邀请您在下一个项目中试用 NanoID,并在评论部分与其他人分享您的想法。
原文地址:Why is NanoID Replacing UUID
原文作者:Charuka Herath
译文出自:掘金翻译计划 本文永久链接:https://github.com/xitu/gold-miner/blob/master/article/2021/why-is-nanoid-replacing-uuid.md
译者:霜羽 Hoarfroster
推荐:
最全的java面试题库
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我们吧!
边栏推荐
- Installation and use of sqoop
- Gaussdb (for MySQL):partial result cache, which accelerates the operator by caching intermediate results
- Mlperf training v2.0 list released, with the same GPU configuration, the performance of Baidu PaddlePaddle ranks first in the world
- 判断链表是否是回文链表
- Virtual serial port simulator and serial port debugging assistant tutorial "suggestions collection"
- 想做软件测试的女孩子看这里
- 免费抽奖 | 《阿巴豆》探索未来系列盲盒数字版权作品全网首发!
- [C language supplement] judge which day tomorrow is (tomorrow's date)
- Tutorial on the principle and application of database system (005) -- Yum offline installation of MySQL 5.7 (Linux Environment)
- Is it reliable to open an account on flush with mobile phones? Is there any potential safety hazard
猜你喜欢
ShenYu 网关开发:在本地启用运行
Today, at 14:00, 15 ICLR speakers from Hong Kong University, Beihang, Yale, Tsinghua University, Canada, etc. continue!
How to use F1 to F12 correctly on laptop keyboard
如何使用 etcd 实现分布式 /etc 目录
如何写出好代码 — 防御式编程指南
How to solve the problem that the battery icon of notebook computer does not display
[pyg] document summary and project experience (continuously updated
机器学习11-聚类,孤立点判别
Tutorial on the principle and application of database system (003) -- MySQL installation and configuration: manually configure MySQL (Windows Environment)
sql刷题584. 寻找用户推荐人
随机推荐
软件工程导论——第六章——详细设计
Kali install Nessus
SQL question brushing 584 Looking for user references
Origin2018 installation and use (sorting)
Internet News: "20220222" get together to get licenses; Many products of Jimi have been affirmed by consumers; Starbucks was fined for using expired ingredients in two stores
sql刷题586. 订单最多的客户
[nodemon] app crashed - waiting for file changes before starting... resolvent
模板引擎Velocity 基礎
What is the effect of choosing game shield safely in the game industry?
unity3d扩展工具栏
String class
Why is the pkg/errors tripartite library more recommended for go language error handling?
Dataframe gets the number of words in the string
拼接字符串,得到字典序最小的结果
C语言输入/输出流和文件操作
C language input / output stream and file operation
China BMS battery management system Market Research Report (2022 Edition)
The difference between the lazy mode of singleton mode and the evil mode
Judge whether a binary tree is a balanced binary tree
AI高考志愿填报:大厂神仙打架,考生付费围观