數(shù)據(jù)庫唯一ID生成策略是什么

這篇文章主要介紹“數(shù)據(jù)庫唯一ID生成策略是什么”,在日常操作中,相信很多人在數(shù)據(jù)庫唯一ID生成策略是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”數(shù)據(jù)庫唯一ID生成策略是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

網(wǎng)站設(shè)計制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺管理系統(tǒng);成都網(wǎng)站制作、成都網(wǎng)站設(shè)計收費合理;免費進行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運營了十年的成都創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司。

數(shù)據(jù)庫自增ID

最簡單的實現(xiàn)方式是使用數(shù)據(jù)庫的id自增策略,如 MySQLauto_increment。如果兩臺數(shù)據(jù)庫分別設(shè)置不同步長,可以生成不重復(fù)ID,從而實現(xiàn)高可用。

優(yōu)點

實現(xiàn)簡單,容易理解,單調(diào)自增,絕對有序。

缺點
  1. 強依賴DB,當(dāng)DB異常時整個系統(tǒng)不可用,屬于致命問題。

  1. ID發(fā)號性能瓶頸限制在單臺MySQL的讀寫性能。

UUID系列

結(jié)合機器的網(wǎng)卡、當(dāng)?shù)貢r間、一個隨記數(shù)來生成UUID。存在一些UUID的變種也是不錯的實現(xiàn)。

優(yōu)點

本地生成,生成簡單,性能非常好,高可用。

缺點
  1. 長度過長,不易存儲,無序不可讀,查詢效率低。

  1. 信息不安全,基于MAC地址生成UUID的算法可能會造成MAC地址泄露,這個漏洞曾被用于尋找梅麗莎病毒的制作者位置。

  1. UUID的無序性可能會引起數(shù)據(jù)位置頻繁變動,嚴重影響性能。

redis實現(xiàn)ID

Redis的所有命令操作都是單線程的,本身提供像 incrincreby 這樣的自增原子命令,所以能保證生成的 ID 肯定是唯一有序的。

舉例,使用 Redis 來生成每天從0開始的流水號。比如訂單號 = 日期 + 當(dāng)日自增長號??梢悦刻煸?Redis 中生成一個 Key ,使用 INCR 進行累加。

優(yōu)點
  1. 靈活方便,且性能優(yōu)于數(shù)據(jù)庫。

  1. 數(shù)字ID天然排序,通過合理設(shè)計可以得到更具有表達能力的ID。

缺點

  1. 引入Redis,編碼和配置的工作量比較大。

  1. 如果ID是連續(xù)的,惡意用戶的扒取工作就非常容易做了,直接按照順序下載指定URL即可;如果是訂單號就更危險了,競對可以直接知道我們一天的單量。所以在一些應(yīng)用場景下,會需要ID無規(guī)則、不規(guī)則。

Twitter的snowflake算法生成ID

優(yōu)點
  1. 時間有序,毫秒數(shù)在高位,自增序列在低位,整個ID都是趨勢遞增的。

  1. 不依賴數(shù)據(jù)庫等第三方系統(tǒng),以服務(wù)的方式部署,穩(wěn)定性更高,生成ID的性能也是非常高的。

  1. 可以根據(jù)自身業(yè)務(wù)特性分配bit位,非常靈活。

  1. Long型。

缺點

依賴于機器的時鐘,如果機器上時鐘回撥,會導(dǎo)致發(fā)號重復(fù)或者服務(wù)會處于不可用狀態(tài)。

百度UidGenerator

百度基于snowflake的一種實現(xiàn)

優(yōu)點

同上 Twitter的snowflake算法生成ID

缺點

需要MySQL(內(nèi)置WorkerID分配器, 啟動階段通過DB進行分配; 如自定義實現(xiàn), 則DB非必選依賴)

美團Leaf

優(yōu)點
  1. 高可用容災(zāi)。

  1. ID號碼是趨勢遞增的8byte的64位數(shù)字,滿足數(shù)據(jù)庫存儲的主鍵要求。

缺點
  1. DB宕機會造成整個系統(tǒng)不可用。

  1. 比較復(fù)雜。

MongoDB的ObjectId

通過“時間+機器碼+pid+inc”共12個字節(jié),通過4+3+2+3的方式最終標識成一個24長度的十六進制字符。

優(yōu)點
  1. 輕量型的,不同的機器都能用全局唯一的同種方法方便地生成它。

  1. 本地生成,含時間戳,有序,成本低。

  1. 安全性高。

  1. 比較短,24位,比如掘金的ID,juejin.im/editor/post…

缺點
  1. 比較長,難于記憶。

  1. 使用機器ID和進程ID,64位Long無法存儲,只能生成特殊ObjectId對象。

自己編程實現(xiàn)雪花算法

參照 Twitter的snowflake算法生成ID,參考MongoDBObjectId的生成策略,使用類似機器ID,進程ID來保證唯一性。

到此,關(guān)于“數(shù)據(jù)庫唯一ID生成策略是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

當(dāng)前名稱:數(shù)據(jù)庫唯一ID生成策略是什么
文章來源:http://www.muchs.cn/article8/iidhop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、營銷型網(wǎng)站建設(shè)品牌網(wǎng)站設(shè)計網(wǎng)站排名、App開發(fā)、外貿(mào)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計公司