背景
弊社が開発したデマンドプロジェクトでは、生成したメッセージをテーブルに格納する際に、他のメッセージと区別しなければならないという課題がありました。そのときは、最も簡潔な主キー ID を直接使用して区別することを考えました。同僚は、区別するためにも使用できると言いましたUUID
。そこでGolangをベースに実装する方法を検討しましたUUID
。
2 つの UUID 関連の知識
2.1 UUID とは何か、および関連する概要
Wikipedia より抜粋: UUID の目的は、データベースを作成するときに名前の重複の問題を考慮することなく、分散システム内のすべての要素が固有のシリアル番号を表す便利な識別情報を持てるようにすることです。UUID が標準的な方法に従って生成される場合、UUID は実際のアプリケーションでは一意であり、中央機関による登録や割り当てに依存しません。UUID が重複する可能性はゼロに近いため、無視できます。正規のテキスト表現では、UUID の 16 オクテットは 32 個の 16 進数として表され、ハイフン「-」で区切られた 5 つのグループに分けられ、合計 36 文字 (16 進数 32 個とハイフン 4 個) の形式「8-4-4-4-12」で表示されます。例えば:
123e4567-e89b-12d3-a456-426655440000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
4 桁の数字 M は UUID のバージョンを示し、数字 N の最上位 1 ~ 3 桁は UUID のバリアントを示します。この例では、M は 1、N は (10xx2) であり、この UUID が「バリアント 1」、「バージョン 1」の UUID、つまり時間ベースの DCE/RFC 4122 UUID であることを意味します。
規範的な8-4-4-4-12