[翻譯]How does Facebook generate unique IDs across all of their models?

前言

翻譯來源


Facebook使用了一個大型的MySQL分段式設置,既用於生成id值,也用於存儲實際數據本身(所以它不是一個獨立的系統)。

每個分段都會從64位元的範圍中得到非常大的一塊id值。然後,它使用一個auto_increment MySQL欄位和一些簡單的數學計算,計算出分配給分段的id範圍內的新值。

例如,你可以給分段 #1分配一個0到1億的範圍。shard #2可以是1億到2億,等等。然後,每個都可以相互獨立地分配新的唯一id。

由於我們處理的是64位的整數,你可以為每一個做非常大的範圍,並且仍然有非常多的分段。

每個分段都會跟蹤生成的id值,以及與之相關聯的數據類型,所以給定一個完全未知的id,你可以計算出它。