- Buildkite は PK として新しい UUIDv7 標準を採用し、従来のシーケンシャル PK と UUID 補助キーの仕組みを置き換えた
- UUID(Universally Unique Identifier)は独立して生成できる一意な識別子であり、分散システムやデータベースで広く使われている
- UUID は、予測しにくさ、内部情報や機密情報の露出防止、追加の防御層の提供など、連番の整数識別子に比べてさまざまな利点を持つ
- しかし、標準的な非時系列 UUID のランダム性は、データベースの性能問題を引き起こす可能性がある
- これを解決するために、Buildkite は時間順の UUIDv4 互換 UUID を試験導入し、これによってメインデータベースの Write Ahead Log(WAL)率を 50% 削減した
- UUID バージョン 7(UUIDv7)は、最上位の 48 ビットに Unix タイムスタンプをミリ秒単位でエンコードし、残りの 74 ビットはランダムに生成される
- Buildkite は、すべての新規テーブルの主キーとして UUIDv7 を使用することを決め、これによって識別子生成の調整が不要になり、アプリケーションロジックが単純化された
- Instagram の ShardingID 実装や Shopify の複合主キー実装のような代替案も検討されたが、チームは UUIDv7 を選択した
- UUIDv7 への移行では、UUID の 128 ビット長により追加の保存領域が必要になるが、これはデータベース行の残りの保存領域と比べればごくわずかである
- 現在、最大の Postgres データベースをシャーディングしており、必要であれば将来的に識別子へシャード番号を含めるため UUIDv8 を使う可能性がある
1件のコメント
Hacker Newsの意見