前言:本系列文章適合有初/中級.NET知識的同學閱讀。
(1)本系列文章,旨在講述研發一個中大型項目所需要了解的一系列“基本構件”,並提供這些“基本構件”的【最簡單】、【最快速】使用方法!!(並不深究技術原理)
(2)通過閱讀本系列文章,能讓你在正規“項目研發”方面快速入門+進階,並能達成“小團隊構建大網站”的目的。
(3)本系列文章采用的技術,已成功應用到人工智能、產業互聯網、社區電商、游戲、金融風控、智慧醫療、等項目上。
支持.Net/.Net Core/.Net Framework,可以部署在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”是相對有序的。
(3)網上自稱分布式唯一Id、GUID、雪花Id、等的工具有很多,但它們生成的Id一般實現不了“全球唯一性”。文本是極少數真正意義上能實現“全球唯一性”的Id工具。
經驗:其實,無論是單機小型應用,還是多機大型分布式應用,從今天開始,你都應采用“分布式唯一Id”作為數據庫中、每個表的“主鍵”。因為與所謂可讀性、長短、自增Id比起來,它的擴展性好太多、太多...
GenerateId方法詳細說明如下:
GenerateId(Async) 聲明:string GenerateId(string Prefix) 用途:生成主鍵Id (此處生成的是一種分布式唯一Id) 參數:(1)string Prefix -- 前綴詞 返回:String -- 主鍵Id
推薦閱讀
- .NET中大型項目開發必備(1)–UUID全球通用唯一識別碼
- .NET中大型項目開發必備(2)–CORS跨域訪問
- .NET中大型項目開發必備(3)–數據庫的負載均衡
- .NET中大型項目開發必備(4)–數據庫的讀寫分離
- .NET中大型項目開發必備(5)–Web服務/WebApi的負載均衡
- .NET中大型項目開發必備(6)–IUtility工具介紹
- .NET中大型項目開發必備(7)–DataAccess數據庫訪問技術
- .NET中大型項目開發必備(8)–高效分頁
- .NET中大型項目開發必備(9)--http請求調用(Post與Get)
- .NET中大型項目開發必備(10)--圖片的裁剪、縮放、與加水印
- .NET中大型項目開發必備(11)--使用Redis緩存
- .NET中大型項目開發必備(12)--使用MQ消息隊列
- .NET中大型項目開發必備(13)--DataAccess數據庫訪問技術(續)
- .NET中大型項目開發必備(14)--數據庫的負載均衡(續)