ULIDのような時間で並び替えられるIDは便利ですよね。
スペックによると、48ビットがタイムスタンプ領域だそうです。これを使い切るのは 10889年だとも書いてあります。
これを使い切った後どうなるのかが気になったので、調べてみましたが、スペックには書いていなさそうでした。
なので、リファレンス実装っぽいJavaScriptの実装を参照してみると・・・
TIME_MAXという定数が定義されていて、これは 281474976710655 で、10889-08-02 14:31:50.655だそうです。
const TIME_MAX = Math.pow(2, 48) - 1
https://github.com/ulid/javascript/blob/a5831206a11636c94d4657b9e1a1354c529ee4e9/lib/index.ts#L23
そして、これを超えた値が入ってきた時には、エラーが発生するようでした。
if (now > TIME_MAX) { throw createError("cannot encode time greater than " + TIME_MAX) }
ということで、10889年にはID生成時にエラーが発生するようです。考えなくていいですね。