ユニークなIDを生成します

プログラム:

A、UUID

UUID(汎用一意識別子)は32桁の16進数、5つのセクションに分けハイフン、36文字8-4-4-4-12の形態です。32の文字と4つのハイフン「 - 」、我々は一般的にハイフンが削除されます使用しますuuid.toString().replaceAll("-","")

現在、5つの生成されたUUID道のバージョン、各アルゴリズムの異なるバージョンがあり、適用範囲が異なっています。

  • 時間ベースのUUID -バージョン1:これは、現在の時間を通じて、通常の乱数で、アドレスローカルのMac計算し、あなたができるorg.apache.logging.log4j.core.utilパッケージ化UuidUtil.getTimeBasedUuid()ツールや他のパッケージを使用します。MACアドレスの使用は、プライバシーは良い十分ではありません、一意性を確保することは可能ですが、また、MACアドレスを公開します。
  • DCEセキュリティUUID -バージョン2 DCEは、同じ時間に基づいてUUIDとUUIDセキュリティアルゴリズム(コンピューティング環境を分散)が、タイムスタンプは、フロント4 POSIX UIDまたはGIDの位置を変更します。UUIDのこのバージョンは、あまり頻繁に実際に使用されます。
  • 名前ベースのUUID(MD5) -バージョン3のMD5ハッシュを計算することにより、名前とネームスペースに名前ベースのUUIDの価値。UUID性を保証このバージョン:異なる名前のUUID生成され、同じ名前空間の一意性;の異なる名前空間のUUIDの一意性、同じ名前空間と同じ名前が繰り返し同じUUIDを生成します。
  • ランダムUUID -バージョン4 UUIDは、乱数または擬似乱数に応じて生成されました。このUUID生成重複の確率を算出することができるが、このバージョンはまた、頻繁に使用されたバージョンであるので、重複の可能性は、無視できます。JDKは、このバージョンで使用されています。
  • 名前ベースのUUID(SHA1) -バージョン5とUUIDアルゴリズム名が類似しているが、ハッシュ値をSHA1(セキュアハッシュアルゴリズム1)アルゴリズムを用いて計算されます。

UUIDと名前ベースのUUID 3のバージョンを生成した乱数を生成するために、バージョン4 UUID方法が付属していたJava JDKで私たちは、そのソースコードを見に行くことができます興味を持っています。

パブリック静的ボイドメイン(文字列[ ]引数{ //バイトのランダム配列に応じてバージョン4 UUIDを取得します。UUID UUIDは、UUID = RandomUUIDを;システムが.OUT のprintln (UUID ToStringメソッドザ・でReplaceAll " - " "" ) ; UUIDのは、//(名前に基づいて)バージョン3を得るに従ったバイト配列を指定。バイト[ ] nbyte = { 10 20は30 } ; UUID uuidFromBytes = UUID nameUUIDFromBytes (nbyte システムが.OUT println (uuidFromBytes のtoString でReplaceAll " - " "" ) }

メリット:シンプルを生成し、各システムは、局所的に生成することができます。
短所:長すぎると障害、次のような問題を引き起こす可能性があります:
1、多くのビジネスシナリオは、クーポンの発行など、適用されません、クーポンが可能に12のプールが配布され、長すぎるだけでなく、簡単に店舗に、ものニーズを満たすことができるようになります原因はクーポンコードを示すために使用することはできません
2を、インデックスに助長されていません。MySQLが保存されたときにUUID長さが長すぎる、主キーを助長されていませんされ、かつ障害キー挿入位置データの主な原因として、頻繁に変更がパフォーマンスに影響
シーンや主キーの非常に多くが、UUIDを使用することができない場合が

第二に、データベースの自動インクリメントの主キー

データに対応したグローバルにユニークなIDとして、主キーが増すから得られる挿入、テーブルを作成することができます
欠点は明らかです、それは単一のMySQLのパフォーマンスによって制限され、高度に同時シナリオです。そして使い勝手が悪い、DBの問題は、IDを生成することができない原因になります。
同時パフォーマンスのステップサイズを大きくするためにさまざまな方法を使用して増分テーブルを高めながらもちろん、マスタースレーブモードの利用可能性によって向上させることができ、我々はこのようなマシン3は、ステップサイズは3に設定する必要が展開したいとし、1の各次数の初期値は、 2.3;だけでなく、マシンを積み重ねるだろう、パフォーマンスを向上させたい、そのような発展に資するないなどの新たな問題を、持っていますが、手順は、マスタースレーブ遅延は唯一のユニークなIDにつながる変更しないと決定されました。

三、スノーフレーク

この収益は、ID生成アルゴリズムさえずり分配され、このような64ビットプログラムは、複数のセグメントに分割されている、など別のマシン、時間を付し、例えば、64ビットスノーフレークにそれぞれ以下(ネットワークからの画像)に示します。 :


 
image.png

上記第一の部分、1ビットれる:0、第2の部分は無意味であるが、41ビット以上である:タイムスタンプことを示し、5ビット以上の第三のセクションは:その部屋IDを示し、第四の部分は10001 5ビット以上である:マシンID、上記1 1001は、第五の一部12ビットであることを示す:番号が同時にルームIDで発生ミリ秒以内のマシンにあることを示し番号、0000億
利点:柔軟性、5はサービス識別子のために使用することができます
短所:比較依存時計

 

その他の実装:https://cloud.tencent.com/developer/article/1490531

おすすめ

転載: www.cnblogs.com/seven717/p/11920671.html