擴容無須數據遷移的分片算法
常見的分庫分表方案大都用主鍵mod一個數(如分為8個庫,則 id % 8 根據餘數決定落到哪個分片)。此種方案中,如果要拓展數據庫將是十分複雜的事情(例如拓展為10個,則代碼需要改為 id % 10 之前的舊數據也要做遷移)。我們希望有一種支持自由規劃無須數據遷移和修改路由代碼的Sharding擴容方案。
方案設計
在Twitter-Snowflake(雪花算法)分庫分表算法主鍵算法本身就帶時間戳,我們可以基於它實現無需數據遷移的擴容方案。 Snowflake生成的ID是一個64位的Long值,通過主鍵可以算出兩個維度的值:
witter-Snowflake(雪花算法)
如此一來,只需根據時間戳,指定某一時間戳後使用新的分片規則,即可不遷移數據對數據庫進行擴容。