參考部落格:大衆點評是如何實作分庫分表的
http://www.360doc.com/content/18/0126/10/40769523_725195148.shtml
①訂單部分資料庫的設計
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB9keNR0T5lkaNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL4QjNxADMzEjM5EjNwkTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
②訂單号的生成(全局唯一ID)
由于訂單号的高并發,使用百度開源的,基于Snowflake算法的全局唯一ID生成器UidGenerator。源碼位址:https://github.com/baidu/uid-generator
美團提供的分布式ID:Leaf:美團分布式ID生成服務開源
訂單号的規則:唯一ID+使用者ID(取4位)
商家訂單号的規則:唯一ID+商家ID(取4位)
③基于買家與賣家兩個次元的分庫分表
買家是1套庫,新增訂單後,再發送MQ消息,同步到賣家庫。
步驟:
1.分庫分表依據,根據訂單号中買家ID進行Hash取模,這樣同一個買家的所有訂單都會存入同一個表中,例如:先對庫進行取模,再對表取模,進而确定訂單應該在哪個庫哪個表中,可以使用阿裡的中間件mycat實作,編寫mycat的分庫分表規則。
2.将訂單号消息發送到MQ,根據賣家ID生成賣家全局唯一賣家訂單ID,以下為賣家的訂單表,使用與買家分庫分表同樣的規則,将商家的所有訂單存入同一個表中。
3.利用一緻性Hash算法減少離散分片在拓展的時候需要重新hash的影響。