maedamaのブログ

アプリケーションエンジニアです。最近は主に設計を担当しています。

忘備録: snowflake/shakeflakeについて

Twitterのsnowflakeについて

遅まきながらしったがこれは便利そうである。あとでちゃんと読む。

Unique identifierのgenerationは、

生成コスト+冗長性 <=> Idのdata size

トレードオフなわけで

  • 生成コスト+冗長性に倒したのが、UUIDであり(128bit)
  • Data sizeに倒したのが RDBSのシーケンステーブルだったり、Auto Incrementだったりする

これはその中間を目指してる模様。おおよそUUIDのように使用できて、UUIDと違ってMySQLのbigintに収まるとすると使いどころは多そう。

ちゃんとよんでないが、Generator(machineId)だけ中央集権的に管理をし、あとは生成器でネットワークを介さずにidをgenerateできるということっぽい。

しかし、machineIdの管理をどうしてるのかは少し気になるところ。異なるホストで使ったりすると時間のずれによる影響のコントロールが難しそうだったりするし、一方で使いまわししないとmachineIdが枯渇したりしそう。

一回破棄したmachineIdは一定時間使用不可能にして別のmachineでも使えるようにするなどすれば問題はでないだろうけど、多少の工夫は必要そうではある