日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

基于.NET Standard的分布式自增ID算法--Snowflake

發布時間:2023/12/4 asp.net 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于.NET Standard的分布式自增ID算法--Snowflake 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

本篇文章主要講述分布式ID生成算法中最出名的Snowflake算法。搞.NET開發的,數據庫主鍵最常見的就是int類型的自增主鍵和GUID類型的uniqueidentifier。
那么為何還要引入snowflake呢?

INT自增主鍵

自增主鍵是解決主鍵生成的最簡單方案,它有如下優勢:

  • 數據庫本身負責主鍵生成,效率高

  • 數據庫本身保證主鍵順序遞增,方便存儲和檢索

  • 相對應的,它也有如下缺點:

  • 嚴重依賴數據庫服務

  • 強順序遞增,不易橫向擴展

  • 分庫分表很難處理

  • 不方便導入數據

  • 上層應用在插入數據時,如果需要獲知主鍵,必須再次查詢

  • 總結來說,INT自增主鍵在單機性能和主鍵嚴格遞增上由很大的優勢,但是在擴展性和分布式數據庫上有較大限制

    GUID主鍵

    GUID(全局唯一標識符,Globally Unique Identifier)為128位(16字節),它使用太網卡地址、納秒級時間、芯片ID碼和許多可能的數字根據算法動態生成,理論上可以有2^128個結果,
    所以產生2個相同的ID的幾率非常小。

    它的優點如下:

  • 應用生成,解放服務器壓力

  • 生成的ID可以做到全庫唯一,方便數據庫分庫分表、數據導入

  • 缺點也很明顯:

  • 16字節太長,浪費空間

  • 非順序遞增,增加數據庫存儲和檢索開銷

  • 在做數據庫主鍵選則時,如果系統較小,業務邏輯相對簡單,可以考慮使用自增主鍵;如果業務復雜,涉及到分庫分表分布式等,建議考慮GUID。如果認為GUID的缺點太影響使用,
    可以考慮馬上開始重點介紹的分布式ID生成算法?Snowflake

    Snowflake是由Twitter提出并首先使用的分布式ID生成算法,使用它來生成分布式趨勢遞增的Id。

  • 分布式
    Id有分布式系統的節點自己生成

  • 趨勢遞增
    主鍵非嚴格順序遞增的,而是根數時間順序遞增,這在一定程度上保證了數據存儲和索引的效率

  • 算法講解

    總長度為64位長整型(8字節)

    1位:首字節固定為0,來保證所有生成的數據都是正數

    41位:第2到第42位工41字節,用于生成毫秒級時間戳,計算大概(2^41?1)/(1000?60?60?24?365)=69 年,對于一般系統來說絕對夠用。

    10位: 第43位到第52位為工作機ID,可表示2^10=1024臺設備,一般高5位表示機房Id(datacenterId),低5位表示工作節點ID(workid)

    12位:第53位到第64位表示序列號,2^12-1=4095

    綜上算法,表示單機每毫秒可以提供4095個Id,所有機器每毫秒可生成4095*1024=4194304個Id。

    它的優點如下:

  • 應用生成,解放服務器壓力

  • 生成的ID可以做到全庫唯一,方便數據庫分庫分表、數據導入

  • 8字節,長整型,節省空間

  • 趨勢遞增,方便數據存儲和查詢

  • 如何在.NET中實現該算法呢?下篇博客重點揭曉。

    原文地址:https://www.cnblogs.com/leafly/p/10080774.html

    .NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com

    總結

    以上是生活随笔為你收集整理的基于.NET Standard的分布式自增ID算法--Snowflake的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。