成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

php與唯一ID生成的相關(guān)事宜

pepperwang / 2779人閱讀

摘要:原文地址唯一的生成并不是一件小事想說愛它也并不是像簡單來一個這樣一件容易的事為什么要唯一數(shù)據(jù)庫的自增在分庫的時候會是一場災(zāi)難假設(shè)分兩個庫因為每個庫都會開始從開始自增屆時系統(tǒng)中將會出現(xiàn)兩個為的用戶自增會暴露用戶量或者其他業(yè)務(wù)量自增會讓有心者

[原文地址:https://blog.ti-node.com/blog...]

唯一ID的生成并不是一件小事 , 想說愛它 , 也并不是像簡單來一個uniqid()這樣一件容易的事 .

為什么要唯一ID ?

1 . 數(shù)據(jù)庫的自增ID在分庫的時候 , 會是一場災(zāi)難 . 假設(shè)分兩個庫 , 因為每個庫都會開始從1開始自增 , 屆時 , 系統(tǒng)中將會出現(xiàn)兩個id為1的用戶 .

2 . 自增id會暴露用戶量或者其他業(yè)務(wù)量 .

3 . 自增id會讓有心者通過API得到任意用戶的信息資料 .

解決方案呢 ?

1 . UUID , 全稱Universally Unique Identifier , 中文通用唯一標識符 . 這個是開放軟件基金會組織提出的一個標準 , 為的就是解決分布式環(huán)境下生成唯一標識符的問題 . UUID的長度是固定的32位 , 組織格式8-4-4-4-12 , 當然了在用的時候 , 中間的分隔符是要去掉的 . 這個貨有幾個問題不得不提 , 首先是字母數(shù)字混合 , 在一些傳統(tǒng)數(shù)據(jù)庫下 , 索引不太好做 , 不僅索引體積大 , 查詢效率也差 . 其次是它本身也非常大 .

2 . MongoDB ObjectId , 格式模樣都很類似于UUID , 是Mongodb內(nèi)置的一種數(shù)據(jù)類型 , 如果你在插入數(shù)據(jù)的時候不指定_id , 那么Mongodb默認就會采用用這個貨才填充_id , 在Mongodb這種類kv性質(zhì)的數(shù)據(jù)庫中 , 有著不錯的查詢效率 .

3 . 自建解決方案 , 為了能夠解決業(yè)務(wù)問題 , 很多公司都自己提出一些解決方案 , 這些方案無疑都要做到如下幾點 :

保證全局空間唯一性

保證盡量采取數(shù)字類型而非數(shù)字字母混合方式

保證一定的時序行和含義

保證一定的可反解性 , 通過反解的結(jié)果可以知道該ID的相關(guān)信息

市面上有的幾種解決方案為Twitter的snowflake , Flikr的數(shù)據(jù)庫自增方案 , Instagram的數(shù)據(jù)庫存儲過程方案 . 重點說下Twitter的snowflake解決方案原理 .

snowflask使用了64bit來表示一個id , Twitter的工程師們將它分成了4個段 , 每段表示不同的含義 . 如下圖 :

前41bit段 , 是時間戳 , 單位會精確到毫秒級 . 所以該bit段可以容納的時間容量為 2^41 = 2.199x10^12 毫秒 , 也就是 2.199x10^9 秒 . 換算成年 , 就是大概為69.7年 . 也就說 , 從1970年1月1日開始 , 可以使用69.7年 , id產(chǎn)生機器的上限就到了 .

中10bit段 , 是機器ID , 最大可以容納2^10=1024臺機器 . 你可以部署1一臺以上的機器 , 給每個機器配置一個與眾不同的獨立的id號 , 比如從1號開始 , 最多可以部署到1024號機器 . 然后機器集群最前面擋一臺nginx之類的服務(wù)器做代理 , 就可以完成一個不錯的id發(fā)號集群了 .

后12bit段 , 是自增序列( 你可以等同為mysql的自增id ) , 它表示的1毫秒內(nèi)的自增序列 . 也就是說從0毫秒開始一直到1毫秒結(jié)束這段時間內(nèi)自增 . 也就說1毫秒內(nèi)最多產(chǎn)生2^12=4096個序列 , 也就是說同一臺機器上同一毫秒內(nèi)最多產(chǎn)生4096個序列 , 如果超過了該數(shù)字 , 那就等待下一毫秒產(chǎn)生新的id .

TIPS : 順帶提一下 , php的uniqid()函數(shù)存在很大的風(fēng)險 , 它生成的id并不能像它的名字那樣做到uniqid , 重復(fù)概率略高 . 詳情查看該函數(shù)的手冊頁評論 . 點擊這里

TIPS : 推薦一個基于snowflake的php id產(chǎn)生器 : donkeyid生成器

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29340.html

相關(guān)文章

  • HTTP請求 相關(guān)事宜

    摘要:向指定資源提交數(shù)據(jù)比如提交表單,上傳文件,請求服務(wù)器進行處理。通過指定資源的唯一標識在服務(wù)器上的具體存放位置,請求服務(wù)器創(chuàng)建或更新資源。請求中會把和一并發(fā)送,但是會先發(fā)送瀏覽器響應(yīng)之后,再發(fā)送。 HTTP請求 HTTP請求由三部分組成: 請求行:包含請求方法、地址和HTTP的協(xié)議版本 消息報頭:包含一系列的鍵值對 請求正文(可選):和消息報頭之間有一個空行 信息報頭中的主要信息有 ...

    andycall 評論0 收藏0
  • python怎么實現(xiàn)自動生成C++代碼

      小編寫這篇文章,主要目的還是給大家講一下關(guān)于python代碼的相關(guān)事宜,比如怎么才能夠?qū)崿F(xiàn)自動生產(chǎn)C++代碼,這里面還是比較的復(fù)雜的,下面小編就給大家貼出具體的代碼給大家來看下?! ∮龅降膯栴}  工作中遇到這么一個事,需要寫比較多的C++的底層數(shù)據(jù)庫類,但這些類大同小異,無非是增刪改查,如果人工來寫代碼,既費力又容易出錯;而借用python的代碼自動生成,可以輕松搞定;  (類比JAVA中的H...

    89542767 評論0 收藏0
  • JavaScript設(shè)計模式

    摘要:依賴于接口的設(shè)計模式下面列出的設(shè)計模式,尤其依賴接口工廠模式。這些私用的靜態(tài)成員可以從構(gòu)造器內(nèi)部訪問,這意味著所有私用函數(shù)和特權(quán)函數(shù)都能訪問它們。構(gòu)造器靜態(tài)特權(quán)方法封裝之弊私用方法很難進行單元測試。 1.弱類型語言 在JavaScript中,定義變量時不必聲明其類型。但這并不意味著變量沒有類型。一個變量可以屬于幾種類型之一,這取決于其包含的數(shù)據(jù)。JavaScript中有三種原始類型:...

    mingzhong 評論0 收藏0
  • 智聯(lián)招聘數(shù)據(jù)爬取準備(1)-智聯(lián)招聘搜索列表源碼解析

    摘要:網(wǎng)頁源碼解析智聯(lián)招聘搜索列表一開始必須要解析智聯(lián)招聘搜索列表頁,從這里更方便實現(xiàn)各種深層級數(shù)據(jù)抓取。顯示不同源碼也不同,盡量選列表模式,源碼更好解析。 網(wǎng)頁源碼解析 - 智聯(lián)招聘搜索列表 一開始必須要解析智聯(lián)招聘搜索列表頁,從這里更方便實現(xiàn)各種深層級數(shù)據(jù)抓取。網(wǎng)頁地址是:http://sou.zhaopin.com/jobs/searchresult.ashx 搜索參數(shù) 智聯(lián)招聘的服務(wù)...

    VPointer 評論0 收藏0
  • PHP接入支付寶單筆訂單查詢接口

    摘要:今天還是繼續(xù)說說項目今天主要說說支付寶訂單查詢接口。直接上支付寶訂單查詢的代碼。微信的訂單查詢與此類似。請求后,程序會向支付寶進行查詢。 payment 項目2.0版本 巴西奧運會來了,剛好我又是做體育行業(yè)的互聯(lián)網(wǎng)。哎!這個月又要加班成狗了。最近遇到好多莫名其妙的問題,待我忙完這段,再跟大家分享下。今天還是繼續(xù)說說 Payment項目今天主要說說支付寶訂單查詢接口。 接口調(diào)用 廢話廢...

    suxier 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<