成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

ULID 與 UUID:用于 JavaScript 的可排序隨機 ID 生成器

開發 前端
UUID[1] 是軟件開發中最常用的通用標識符之一。然而,在過去的幾年里,新的替代品挑戰了它的存在。

UUID[1] 是軟件開發中最常用的通用標識符之一。然而,在過去的幾年里,新的替代品挑戰了它的存在。

其中,ULID 是領先的競爭對手之一,因為它提供可排序的唯一 ID。

在本文中,我將通過示例討論 ULID 的特性,以便您更好地了解何時使用它。

了解 ULID 及其用法

ULID[2] 代表通用唯一按字母順序排序的標識符。它每周有超過 271K 的 NPM 下載和 1.7K 的 GitHub Stars。

您可以使用 npm i ulid 命令輕松安裝 ULID NPM 庫并在您的項目中使用它。

import { ulid } from ‘ulid’;
ulid();

它具有一些驚人的功能,解決了UUID的一些缺點。例如,當在關系數據庫中使用UUID時,由于缺乏內置的排序,可能會出現數據索引的困難。在這種情況下,你可能被迫包括另一個屬性來使數據可排序。

此外,UUID 在隨機性、效率和生成方面存在一些常見問題,ULID 解決了這些問題。因此,讓我們詳細了解一下 ULID。

同時使用時間戳和隨機性

當你使用UUID生成一個ID時,它將只考慮隨機性或時間戳,生成一個36個字符的長字符串。

但是,ULID 會同時考慮隨機性和時間戳來生成 ID,并將它們編碼為 26 個字符串(128 位)。

// UUID示例
01FHZXHK8PTP9FVK99Z66GXQTX

ULID 的前 10 個字符表示時間戳,ULID 的第二部分表示隨機性。這兩個部分都是 base 32 編碼字符串,分別使用 48 位和 80 位表示。

例如,上述 ULID 的分解如下所示:

01FHZXHK8PTP9FVK99Z66GXQTX
時間戳 (48 bits) - 01FHZXHK8P
隨機數 (80 bits) - TP9FVK99Z66GXQTX

注意:ULID 使用 Crockford 的 Base32 字母表 (0123456789ABCDEFGHJKMNPQRSTVWXYZ) 進行編碼。它不包括 I、L、O 和 U 字母以避免任何意外的混淆。

UILD 是按字典順序排序的

詞典可排序性是 ULID 最突出的特性之一。

正如我們已經知道的,ULID 可以排序。ULID 的這一特性允許開發人員輕松管理與數據庫相關的任務,例如排序、分區和索引。

例如,你不需要創建一個額外的列來維護記錄的創建時間。相反,你可以使用ULID的時間戳表示,根據創建時間來排序或劃分數據。

注意:ULID 的時間戳部分以 UNIX 時間(以毫秒為單位)表示,直到公元 10889 年才會耗盡空間。

隨機數的高安全性

大多數隨機 ID 生成器使用 unsafeMath.random() 來生成 ID。但是,ULID 默認阻止使用 Math.random() 并根據情況自動決定合適的隨機數生成器。

例如,它將在瀏覽器中使用 crypto.getRandomValues,在 Node 環境中使用 crypto.randomBytes。

但是,如果您想在 ULID 中使用Math.random(),則需要明確允許該權限。

import { factory, detectPrng } from 'ulid'

const random_number_gen = detectPrng(true)
const ulid = factory(random_number_gen)

注意:您也可以使用自己的偽隨機數生成器來生成 ULID。

單調的ULIDs與種子時間

ULID 允許您通過傳遞種子時間來獲取具有相同時間戳的 ID。例如,如果要創建以 2021–10–15 作為時間戳的 ID,則需要將 UNIX 時間戳(以毫秒為單位)傳遞給 ulid() 函數。

ulid(1634263671000) // 01FJ0V986RA01G70YQ5Z0AMQE7

除此之外,ULID 允許創建一系列值不斷增加的 ID。您需要做的就是使用 monotonicFactory創建一個 ulid 對象并傳遞相同的時間種子。

import { monotonicFactory } from ‘ulid’
const ulid = monotonicFactory()
console.log(ulid(100000)); // 00000031N0J7R2B57M8YG73J7M
console.log(ulid(100000)); // 00000031N0J7R2B57M8YG73J7N
console.log(ulid(100000)); // 00000031N0J7R2B57M8YG73J7P
console.log(ulid(100000)); // 00000031N0J7R2B57M8YG73J7Q
console.log(ulid(100000)); // 00000031N0J7R2B57M8YG73J7R

多語言支持

ULID 支持近 50 種語言,包括 JavaScript、Java、C++、Dart、Python 和 .NET。

此外,二進制表示可用于超過 15 種語言,包括 C++、Dart、Go、JavaScript 和 Python。

JavaScript 模塊支持

ULID 可以輕松地與所有類型的 JavaScript 模塊一起使用,包括 ES6+、CommonJS 和 AMD。

// TypeScript , ES6+ Modules
import { ulid } from ‘ulid’;
ulid();

// CommonJS
const ULID = require('ulid');
ULID.ulid();

// AMD
define(['ULID'] , function (ULID) {
ULID.ulid()
});

// Browser
<script src="https://unpkg.com/ulid@2.3.0/dist/index.umd.js"></script>
<script>
ULID.ulid()
</script>

其他特性

每毫秒可以生成 1.21e+24 個唯一的 ULID。

ULID 是 URL 安全的,因為它不使用任何特殊字符。

小包大小 - 2.5 kB (minified), 1.2kB (GZipped).

下載時間約為 1ms –10 ms。

比 UUID 短。

與 UUID 128 格式兼容。

未來重點

根據 StackOverflow 中的許多專家意見,使用 ULID 沒有明顯的缺點或限制。

但是,不區分大小寫和 80 位隨機性是開發人員在 ULID 中注意到的主要缺點。但它的字典排序能力使其在所有其他產品中獨樹一幟。

此外,如果我們考慮過去一年 ULID 的使用趨勢,我們可以看到它處于上升趨勢。雖然下載量比 UUID 少很多,但在過去的一年里它已經獲得了超過 150000 名用戶。

??https://www.npmtrends.com/ulid??

憑借所有這些功能以及我使用 UUID 和 ULID 的經驗,對于需要排序的用例來說,這是不費吹灰之力的。所以,不要猶豫,在你的下一個項目中使用 ULID。

原文:https://blog.bitsrc.io/ulid-vs-uuid-sortable-random-id-generators-for-javascript-183400ef862c

作者:Chameera Dulanga

參考資料

[1]UUID: https://en.wikipedia.org/wiki/Universally_unique_identifier

[2]ULID: https://www.npmjs.com/package/ulid

本文轉載自微信公眾號「前端全棧開發者」,可以通過以下二維碼關注。轉載本文請聯系前端全棧開發者公眾號。

責任編輯:武曉燕 來源: 前端全棧開發者
相關推薦

2024-11-01 15:51:06

2017-07-01 16:02:39

分布式ID生成器

2011-12-23 13:42:05

JavaScript

2020-10-10 09:19:58

JavaScript開發技術

2023-07-21 17:08:30

2023-03-01 00:07:32

JavaScript迭代器生成器

2015-04-22 09:36:27

JAVA代碼生成器

2022-10-17 18:29:55

2024-05-29 09:05:17

2011-05-19 11:30:00

密碼密碼生成器

2025-01-06 09:06:04

JavaScriptWeb 開發Generators

2022-11-21 17:44:03

機器學習文本生成器自然語言

2019-12-27 10:00:34

開源技術 軟件

2017-03-20 17:49:21

Java Web模板代碼

2024-03-07 20:35:20

微軟人工智能

2014-07-23 10:07:34

2018-11-19 10:10:51

Python數據庫隨機生成器

2017-09-06 09:26:03

Python生成器協程

2025-06-05 02:20:00

2020-11-04 14:40:26

分布式Tinyid數據庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产玖玖 | 久久成人免费观看 | 一级黄色片免费 | 亚洲欧美在线观看 | 在线国产一区二区 | 福利视频日韩 | 精品久久久久久久人人人人传媒 | 成人国产精品久久 | 羞羞视频免费观看 | 久久久久久av | 97精品超碰一区二区三区 | 久久国产精品免费一区二区三区 | 盗摄精品av一区二区三区 | 久久精品99 | 亚洲成人精品 | 国产在线麻豆精品入口 | 亚洲一区二区久久 | 精品国产乱码一区二区三区a | 久优草 | 国产免费福利小视频 | 日韩成人高清在线 | www亚洲成人 | 黄色欧美视频 | 伊人精品国产 | 欧美日本一区 | 午夜小视频在线播放 | 天堂av中文 | 国产精品一级 | 超碰精品在线观看 | 日韩快播电影网 | 欧美a级成人淫片免费看 | 九九九久久国产免费 | 精品国产精品国产偷麻豆 | 午夜一级黄色片 | 国产一级片91 | 伊人网99| 亚洲精品欧洲 | 日韩在线视频免费观看 | 亚洲欧美日韩一区二区 | 亚洲精品国产偷自在线观看 | 视频一区二区三区在线观看 |