大企業才用的分散式唯一Id,它比GUID好

2023-09-08 06:00:08
支援.Net Core(2.0及以上)與.Net Framework(4.5及以上)

可以部署在Docker, Windows, Linux, Mac。

分散式唯一Id,顧名思義,是指在全世界任何一臺計算機上都不會重複的唯一Id。

在單機/單伺服器/單資料庫的小型應用中,不需要用到這類東西。但在高並行、海量資料、大型分散式應用中,分散式唯一Id卻是構建整個系統的最核心一環。

 

設想一下如下場景:

在某個大型電商系統A中,「訂單」這類巨量資料(比如,每天產生1500萬條訂單)必定不會儲存在1臺資料庫伺服器中,而是分散式的儲存在多臺資料庫伺服器組成的一個叢集中(比如,1000臺資料庫伺服器組成一個叢集)。由於海量資料+高並行等特性時常會伴隨「訂單」發生,所以,如何確保「訂單Id」在整個系統中唯一不重複,已經有些設計難度了。

 

若此時,另外一家公司的電商系統B,要與你家的電商系統A合併(甚至還有更多公司的C、D、E、等等),那麼這些系統合併時「訂單Id」出現重複的概率是很大的。要把這些重複修改成唯一,又會要費一番不小的改造功夫,十分麻煩…

 

但是,若我們一開始就使用分散式唯一Id來實現「訂單Id」,則不會有這些麻煩,一切迎刃而解,且十分輕鬆…

 

DeveloperSharp包中,提供了全網最完善的分散式唯一Id生成工具,使用範例如下:

若是在.Net Core環境下,程式碼如下:

using DeveloperSharp.Framework.CoreUtility; //從NuGet參照DeveloperSharp包
--------------------------

   //首先在Startup.cs或Program.cs檔案中進行工具預載
   Services.AddTransient<IUtility, Utility>();
--------------------------

   //IU是在相關檔案中,通過依賴注入方式獲取的IUtility型別物件
   var Id = IU.GenerateId("Order");//產生分散式唯一Id

 

若是在.Net Framework環境下,程式碼如下:

using DeveloperSharp.Framework.CoreUtility;//從NuGet參照DeveloperSharp包
------------------------

     IUtility IU = new Utility();
     var Id = IU.GenerateId("Order");//產生分散式唯一Id

說明:(1)「分散式唯一Id」的長度較長,具有全球唯一性,最早起源於facebook、twitter的應用。

           (2)「分散式唯一Id」比GUID更好。GUID偶爾還是會有重複出現,而且它是無序的,會導致資料庫查詢效能下降,而「分散式唯一Id」是相對有序的。

經驗:其實,無論是單機小型應用,還是多機大型分散式應用,從今天開始,你都應採用「分散式唯一Id」作為資料庫中、每個表的「主鍵」。因為與所謂可讀性、長短、自增Id比起來,它的擴充套件性好太多、太多...

 

GenerateId方法詳細說明如下:

GenerateId
宣告:string GenerateId(string Prefix)
用途:生成主鍵Id (此處生成的是一種分散式唯一Id)
引數:(1)string Prefix -- 字首詞
返回:String -- 主鍵Id

 

首發原文連結:http://www.developersharp.cc/content5.html

結尾


關注下方公眾號,助力升職加薪。

你也可以加入我們(新增微信:894988403,備註「進群」),向大佬學習,探行業內幕,享時代機遇。