気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

DB分割(シャーディング)時のMySQLのID採番について

ID採番方法

  • ✗ auto_increment
    • idが重複する問題があり
  • ◯ sequence tableの作成
  • ◯ UUIDカラムの追加
    • ◯ ULID(時系列な並びのID)
    • ◯ UUIDv6, UUIDv7, UUIDv8も時系列順にソート可能

Seaquence

データが大規模になると、シーケンス発行がボトルネックなりすい

UUIDを利用する

メリット

  • 個別ノードが自律的にキー発行可能
    • 冪等性(べきとうせい)を担保可能
    • キーを事前決定できると、ロジックシンプル化・キーの意味付け排除が可能
  • セキュリティ向上
    • 利用者が次のキーを予測しにくい特性あり

デメリット

  • InnoDB のテーブルはクラスタインデックス構造のため、インデックス全体のランダム位置に読み込みが必要
  • 1レコード INSERT のたびに、もしヒットしなければストレージに対するI/Oが発生

UUIDv6, UUIDv7, UUIDv8

  • UUIDv6, UUIDv7, UUIDv8は、時系列順にソート可能
    • テーブルのキーとして使えば、ソートしなくても順番にならび、書き込む際も順々に書き込めて、データアクセスが局所的になる

参考URL