大家好,今天小編關(guān)注到一個比較有意思的話題,就是關(guān)于標(biāo)識碼設(shè)計技術(shù)的問題,于是小編就整理了1個相關(guān)介紹標(biāo)識碼設(shè)計技術(shù)的解答,讓我們一起看看吧。
謝邀~
關(guān)于這個問題,有幾個方案和大家分享一下。
先說最笨的方法,利用數(shù)據(jù)庫的自增長序列生成,數(shù)據(jù)庫內(nèi)唯一。
優(yōu)點:理解起來最容易,用起來也最容易。
缺點:也非常明顯了,每種數(shù)據(jù)庫的實現(xiàn)不同,如果數(shù)據(jù)庫需要遷移的話比較麻煩;最大的問題是性能問題,不太好擴展,如果并發(fā)大的時候,數(shù)據(jù)庫很可能扛不住。
Redis的單線程的,利用incr和increby;MongoDB的ObjectId;ZK通過znode數(shù)據(jù)版本;都可以生成全局的唯一標(biāo)識碼。
優(yōu)點:性能高于數(shù)據(jù)庫;可以使用集群部署。
缺點:需要引入對應(yīng)的組件,增加系統(tǒng)的復(fù)雜度。
現(xiàn)在分布式大行其道,由于數(shù)據(jù)庫分布在不同的服務(wù)器上,如果用傳統(tǒng)的自增等方式生成ID,不同的數(shù)據(jù)庫上的ID難以保證不重復(fù),而有業(yè)務(wù)影響風(fēng)險!
可以說唯一標(biāo)識碼是分布式數(shù)據(jù)庫所要面臨的第一道關(guān)!
我接觸分布式多年,對于唯一標(biāo)識碼的生成遇見過這么幾種方式!
1,UUID:算法有很多種,使用同一臺機器上的時間生成字節(jié)來區(qū)分同一臺機器上的不同ID,使用IEEE機器識別號或者IP地址等來區(qū)分不同機器上的ID,這樣不同的機器間和同一個機器都進行了區(qū)分,保證生成的UUID是全局唯一的!
JAVA有自帶的UUID.randomUUID()算法來實現(xiàn)!
局限性:生成的ID沒有順序性!
2,snowflake:twitter自己開發(fā)的唯一ID算法,使用41位時間序列,10位機器號的標(biāo)志,12位的順序的計數(shù),每毫秒可以生成4096個唯一序列號!
3,基于redis的原子函數(shù)incr或者incrby方法:因為redis是單線程的工作模式,利用自增方法可以得到全局唯一的ID,不過如果是沒有引入redis組件的,可能需要額外的成本!
4,mongodb的objectid:因為mongodb一開始就是為了分布式而生,所以生成objectID算法也保證全局唯一性!生成的objectID也是由時間戳+機器唯一標(biāo)志+進程ID+計數(shù)器!每秒鐘可以生成2563個不一樣的objectID!
以上是我用過的唯一ID生成算法,有問題隨時找我交流!更多的技術(shù)分享,敬請關(guān)注。。
到此,以上就是小編對于標(biāo)識碼設(shè)計技術(shù)的問題就介紹到這了,希望介紹關(guān)于標(biāo)識碼設(shè)計技術(shù)的1點解答對大家有用。