回覆列表
  • 1 # 星辰大洋

    先說句題外話,做到需要分庫分表的業務量,應該有專門的人員來對資料庫進行設計了,不應該是由開發人員單方面決定,所以貴公司的團隊結構需要稍微最佳化一下了。

    第一個問題,冗餘。所謂冗餘,是指同一項資料儲存有多份儲存。在資料庫設計中,經常利用冗餘來針對性的對業務進行最佳化:1、各種叢集結構,不管是主從結構還是主-主結構,資料會複製到多個數據庫例項中,達到分擔壓力和高可用的目的;2、不同的表中儲存相同的欄位,主要是針對一些高頻率的查詢業務,避免join操作對效能造成損害。冗餘最大的問題是一致性問題,由於資料儲存在多個地方,一旦改動需要保證所有的副本都能同步改動。

    第二個問題,擴容。分庫分表的擴容,核心是路由方案。以比較通用的hash路由為例,假設擴容前的路由方案為:DB_ID = HASH(KEY) MOD 2,現在需要擴容,擴容的路由方案應該怎麼定?一個基本原則就是不要造成資料的遷移。如果新方案為DB_ID=HASH(KEY) MOD 3,那麼勢必會造成之前的兩個庫裡的資料均勻的散落在3個新庫中,造成巨大的遷移成本,而使用DB_ID=HASH(KEY) MOD 4這個方案,將兩個節點擴容為4個節點,則會簡單很多,只需要將之前DB_ID為1的資料複製到DB_ID3,將DB_ID0的資料複製到DB_ID2,即可保證正確性,在進行簡單的刪除操作即可。

  • 中秋節和大豐收的關聯?
  • 閨女快上幼兒園了,要不要告訴她一些保護自己身體的話?