UUID
Universally Unique IDentifier
Stop using numbers as IDs. Just use UUIDs. seriously
メリット
外と通信せずに重複しない ID を採番できる
ID を推測できない。ID を外に公開するようなシステムの場合、特に重要
連番ではユーザー数を推測できることがある
総数が少ないとバレたり
IDを操作すると次のデータにアクセスできたり
うっかり別の ID を渡したり、別の ID で処理する確率がシーケンシャルなIDの場合に比べて低い
複数のデータベースで分散してデータを持つ場合やデータを移行する場合にもプライマリーキーの重複を避けられる
シャーディングしているとき、それぞれのノードでユニークなキーを持つことを補償しないといけない
固定長になるのでインタフェースを決めやすい
64bit uintとか
https://siguniang.wordpress.com/2013/03/17/stop-using-numbers-as-ids-just-use-uuids/
MySQLでプライマリキーをUUIDにする前に知っておいて欲しいこと
InnoDB のテーブルは主キーによるインデックスのツリー構造(B+Tree)で、リーフページにテーブルの値を持つクラスタインデックス構造です。
この場合、主キーがUUIDだとパフォーマンスの問題が生じやすい
書き込み時にインデックス全体にIOが発生する
読み取り時にはバッファプールのキャッシュヒット率が低い
時系列ではなくまばらに分布しているため
ULIDによってシーケンシャルにするテクニックもある
UUIDv6,7,8
時間順にソート可能なUUIDv6, UUIDv7, UUIDv8の提案仕様
時系列順にソート可能
MongoDBのObjectIDのように扱えそうか