支持.Net Core(2.0及以上)與.Net Framework(4.5及以上) 可以部署在Docker, Windows, Linux, Mac。 分散式唯一Id,顧名思義,是指在全世界任何一臺電腦上都不會重覆的唯一Id。 在單機/單伺服器/單資料庫的小型應用中,不需要用到這類東西。但在高並 ...
支持.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,備註“進群”),向大佬學習,探行業內幕,享時代機遇。