在數據庫主鍵設計上,比較常見的方法是采用自增ID(1開始,每次加1)和生成GUID。生成GUID的方式雖然簡單,但是由於采用的是無意義的字符串,推測會在數據量增大時造成訪問過慢,在基礎互聯網的系統設計中都不推薦采用。自增ID的方法雖然比較適合大數據量的場景,當時由於自增ID是按照順序增加的,數據記錄都是可以根據ID號進行推測出來,對於一些數據敏感的場景,不建議采用
最近在一篇文章中看到P2P網站處理訂單流水號的思路還不錯。該平台設計時希望能使用一種簡單一些的ID,並且希望ID能夠按照時間有序生成。Twitter 的 Snowflake 算法解決了這種需求。在流水號服務中采用了這種算法。
snowflake算法的好處有兩點:一是純數字,二是整體上來說是按時間順序的。
Scala版詳見開源項目https://github.com/twitter/snowflake
Python版詳見開源項目https://github.com/erans/pysnowflake
C#版詳見開源項目https://github.com/ccollie/snowflake-net