1. 程式人生 > >資料庫分庫分表的應用場景及方法分析

資料庫分庫分表的應用場景及方法分析

flickr開發團隊在2010年撰文介紹了flickr使用的一種主鍵生成測策略,同時表示該方案在flickr上的實際執行效果也非常令人滿意。它與一般Sequence表方案有些類似,但卻很好地解決了效能瓶頸和單點問題,是一種非常可靠而高效的全域性主鍵生成方案。整體思想是:建立兩臺以上的資料庫ID生成伺服器,每個伺服器都有一張記錄各表當前IDSequence表,但是SequenceID增長的步長是伺服器的數量,起始值依次錯開,這樣相當於把ID的生成雜湊到了每個伺服器節點上。例如:如果我們設定兩臺資料庫ID生成伺服器,那麼就讓一臺的Sequence表的ID起始值為1,每次增長步長為2,另一臺的Sequence

表的ID起始值為2,每次增長步長也為2,那麼結果就是奇數的ID都將從第一臺伺服器上生成,偶數的ID都從第二臺伺服器上生成,這樣就將生成ID的壓力均勻分散到兩臺伺服器上,同時配合應用程式的控制,當一個伺服器失效後,系統能自動切換到另一個伺服器上獲取ID,從而保證了系統的容錯

優點:高可用、ID較簡潔

缺點:需要單獨的資料庫叢集

4.5 UID生成方案|組合UID

  組合UID,是一種帶有業務屬性的UID方案,取UID的前N位,再通過業務屬性(其他主鍵)的二級制後N位來生成UID。例如:訂單UID=60位全域性唯一id+userid二進位制末4位(如userid=666,其二級製為:0000 0010 1001 1010

,取1010),此時省的訂單id具有了使用者的基因,在制定分表分庫規則時,可以據此規則將同一使用者的訂單都放到同一張庫表中。

優點:

1.解決UUID無序的問題

2.可以滿足滿足業務屬性條件的資料都儲存在同一個庫表中,避免查詢時的“跨庫join”的情況。如分庫分表時滿足同一使用者生成的訂單都在同一個庫表中。