好文分享 — Why UUID7 is better than UUID4 as clustered index in RDBMS
先前有介紹過 clustered index 的運作原理,以及為什麼亂數會對 clustered index 造成效能影響。
譬如 UUID4 這種亂數 Id 所造成的效能影響,其解決辦法為讓亂數的開頭部分有序產生,如此 clustered index 就不會因為亂數會造成需要一次更新多個 nodes 而效能大受影響,所以在開頭用 48 bits 的 timestamp 產生 Id 的 UUID7 就會比用 UUID4 來的更好。
“Why UUID7 is better than UUID4 as clustered index in RDBMS” 1 文透過實際實驗測試 UUID4, UUID7 與遞增 Id 用在 clustered index (簡單來說就是 Primary Key)的寫入效能差異,該文分別做了 1 百萬筆與 5 百萬筆的寫入測試, UUID7 與 UUID4 之間的寫入時間差異最慢可以差到 23% 的情況,足已證明 UUID4 純亂數會對資料庫的 clustered index 效能造成影響。
除了 UUID7 之外, Instagram 的 ShardingID, Spoify 的 ULID 以及 MongoDB 的 ObjectID 也都是用相似的手法在 Id 中加入 timestamp 確保開頭有序,避免對 clustered index 造成效能影響。
總之,好文章推推!