垂直切分的粒度指的是在作垂直切分時容許幾級的關聯表放在一個shard裏.這個問題對應用程序和sharding實現有着很大的影響.html
關聯打斷地越多,則受影響的join操做越多,應用程序爲此作出的妥協就越大,但單表的路由會越簡單,與業務的關聯性會越小,就越容易使用統一機制處理.在此方向上的極端方案是:打斷全部鏈接,每張表都配有路由規則,可使用統一機制或框架自動處理.好比amoeba這樣的框架,它的路由能且僅能經過SQL的特徵(好比某個表的id)進行路由.sql
反之,若關聯打斷地越少,則join操做的受到的限制就小,應用程序須要作出的妥協就越小,可是表的路由就會變複雜,與業務的關聯性就越大,就越難使用統一機制處理,須要針對每一個數據請求單獨實現路由.在此方向上的極端方案是:全部表都在一個shard裏,也就是沒有垂直切分,這樣就沒有關聯被打斷.固然這是很是極端的,除非整個數據庫很簡單,表的數量不多.數據庫
實際的粒度掌控須要結合「業務緊密程度」和「表格數據量」兩個因素綜合考慮,通常來講:架構
總之,垂直切分的粒度在兩個相反的方向上呈現優點與劣勢並存並相互博弈的局面.架構師須要作的是結合項目的實際狀況在二者之間取得收益最大化的平衡.框架