NewId:跨節點工作且無衝突的順序 id 生成器
NewId 可用作嵌入式唯一 ID 生成器,可生成 128 位(16 位元組)順序 ID。
許多應用程式使用唯一識別符號來標識資料記錄。使用關聯式資料庫 (RDBMS) 的應用程式的一種常見方法是將這些 ID 的生成委託給資料庫 - 透過標識列 (MS-SQL) 或類似方式。這種方法適用於小型應用程式,但很快就會成為網路規模的瓶頸。請參閱來自 twitter 上的 blokes 的這篇文章,另一個用例是使用訊息傳遞在它們之間進行通訊的應用程式 - 基於微服務的架構就是這種情況。這些應用程式可能需要訊息的連續唯一 ID。
一種簡單的方法是使用應用程式中生成的 GUID/UUID。雖然這有效,但在大多數框架中 GUID 不是連續的。這剝奪了根據記錄的唯一 ID 對記錄進行排序的能力。
Erlang 庫 flake ( https://github.com/boundary/flake ) 採用了一種使用機器 MAC、時間戳和每個執行緒序列號生成 128 位 k 排序 id(按詞法讀取時間排序)的方法。這些 ID 是連續的,不會在執行使用這些作為 UUID 的應用程式的節點叢集中發生衝突。
NewId id = NewId.Next(); //produces an id like {11790000-cf25-b808-dc58-08d367322210} // Supports operations similar to GUID NewId id = NewId.Next().ToString("D").ToUpperInvariant(); // Produces 11790000-CF25-B808-2365-08D36732603A // Start from an id NewId id = new NewId("11790000-cf25-b808-dc58-08d367322210"); // Start with a byte-array var bytes = new byte[] { 16, 23, 54, 74, 21, 14, 75, 32, 44, 41, 31, 10, 11, 12, 86, 42 }; NewId theId = new NewId(bytes); |
生成的 id 可以透過設計進行預測。在需要不可預測性的情況下,不應使用它們。這些 ID不應用於:
- 生成密碼
- 安全令牌
- 任何你不希望別人猜到的東西。
NewId 生成的 id 公開了生成 id 的機器的身份(透過其 MAC 地址)以及它生成的時間。對於某些對安全敏感的應用程式來說,這可能是一個問題。
點選標題
相關文章
- nginx的location匹配順序、優先順序,location對映衝突排查Nginx
- 工作293:調節刪除順序刪除
- 科研和工作並不衝突
- MySQL 按指定 ID 順序返回結果MySql
- Mysql按指定 ID 順序返回結果MySql
- 如何克服解決Git衝突的恐懼症?(序)Git
- 欄位按照指定 ID 順序進行排序排序
- 單連結串列基本介紹以及按照順序插入節點
- 棧是按照順序且連續儲存值
- hash解決衝突的方法優缺點
- pxc 三個節點全部異常和正常關閉的啟動順序
- git修改檔案後無法push,需要先pull.並且pull後檔案有衝突Git
- 達夢8MPP叢集(2節點+順序備)linux下部署Linux
- VMware無法啟動/VMware和wsl衝突問題/VMware與Hyper-V衝突問題
- 解衝突用到的命令
- 雜湊衝突
- DataNode工作機制 & 新增節點 &下線節點
- python運算子及優先順序順序Python
- Git 衝突了怎麼辦,如何高效快速的解決程式碼衝突?Git
- 【面試】工作中遇到的難點及解決方案——人臉解鎖相機衝突問題面試
- 埠衝突,可愛的8080
- 順序表
- lvm 名稱衝突LVM
- git 解決衝突Git
- Git 解決衝突Git
- 第2章 順序表及其順序儲存
- promise、async和await之執行順序的那點事PromiseAI
- 順序表的學習
- pipeline的執行順序
- 順序表的實現
- 順序表的堆排序排序
- 排查 k8s 叢集 master 節點無法正常工作的問題K8SAST
- git pull衝突的解決方案Git
- fcitx5 和 ibus的衝突
- JAR衝突問題的解決JAR
- SpringBoot配置檔案優先順序載入順序Spring Boot
- 順序表應用5:有序順序表歸併
- 順序表應用6:有序順序表查詢