Closed kachick closed 2 years ago
UUIDv6~v8 は永遠に通らなそうな雰囲気。 IDにタイムスタンプを付加すると、そのIDだけから類推される情報が増えるので、何でもかんでも使っていいとはいか無さそう。 でもそれは類推のより簡単な incremental な int の方が大抵の場合問題になりやすいと思っている。 他のコンテキストとの重複も有る。1つの会社が2つのDB持ってる時、randomness の弱いIDだとその情報で雑に会話ができない。使い方に依ってはテーブル間ですら重複すると思う。
なのでまぁパフォーマンスとか諸々あるだろうけど、基本的に UUID を採用したほうが良いんじゃないかなとは思っている。大体の場合で便利というか。 で、そこにID単体で順序の概念も持たせようとしたのがULIDだと思うんだけど、ミリ秒単位でのtimestampというのは大体のDBがマイクロ秒対応なこと考えるとイマイチな仕様ではとは思う。(ライブラリに依ってはtimestampをマイクロ秒まで独自拡大してるものもあった) ulid/spec のアクティビティもずっと止まってるし、大文字小文字やハイフン含めた文字表現としての多さとかうーんというとこが多い。一番本家のissueで問題に上がってるのは monotonicity で、それまでの Ruby のライブラリで対応してるのが無かったから自分で実装してみたけど仕様としてどうなんだというのはわからなくもない。 エンコード後の文字列が短いというのも、一番基本的なフォーマットにハイフンが入ってないので人間がパッと見で読めるか、順序がわかるかというとかなり厳しい。
でも良さもやっぱ有るので、個人的になんか次作る時はまたULID採用、あるいはUUIDとの併用してみようかなと思っている。
UUIDv6~v8 は永遠に通らなそうな雰囲気。
まだRFC上は draft? っぽいんだけど、 ruby 公式(の、標準ライブラリ)に UUIDv7 がマージされたのでなんか動きがあったのかも ULIDはそもそも spec リポジトリがメンテナンスされてないの厳しいから、もし採用するならこっちの方が良いかも?
https://github.com/kachick/ruby-ulid/issues/37#issuecomment-1735762882 https://bugs.ruby-lang.org/issues/19735
UUIDv6~v8 は永遠に通らなそうな雰囲気。
通った~
https://github.com/ietf-wg-uuidrev/rfc4122bis/commit/6fbd9f0666687c58da593370240c4c1b83a63b59 https://www.rfc-editor.org/rfc/rfc9562.txt
というか、2年前の時点で方向性は受け入れられてて詳細を詰めてたのかな。https://github.com/uuid6/uuid6-ietf-draft/commit/815e4a6658e1216a5d383a067430cc20792872e5
そんな細かく読めてないけど、 6.2. Monotonicity and Counters
のとこだけは後でちゃんと読んでおきたい。なんか肯定されてる雰囲気なのでULIDのスレッドを眺めてた時の感覚からすると意外だ
通ったのか...!サグラダファミリアより時間かかるかと思ってたぜ
ほんまそうやで。やはりRFCは自ら作り変えるもの・・・(労力すごそう) こういう公式に採用されると大分意識変わるから、今後侃々諤々の議論を介さずともIDにタイムスタンプ普通じゃねみたいになってくのかもしんない
例示されてた既存技術の中でもULIDは一番上だったし、ULIDの足跡は大きいなー ただ今後ULID採用されてるところが負債扱いされそうな気もするが・・・
TL;DR
マシ
だと思っている。もしRFCのdraftが採用されたら UUIDv7 あたりを使ってみたい何についてか / About
ref: link, link
経緯 / History
1. 1. 1. 1. 1. 1.
結論 / Conclusion