資料拆分前其實是要首先做準備工作的,然後才是開始資料拆分,我先講拆分前需要做的事情:
第一步:採用分布式快取redis、memcached等降低對資料庫的讀操作。第二步:如果快取使用過後,資料庫訪問量還是非常大,可以考慮資料庫讀、寫分離原則。第三步:當我們使用讀寫分離、快取後,資料庫的壓力還是很大的時候,這就需要使用到資料庫拆分了。資料庫拆分原則:就是指通過某種特定的條件,按照某個維度,將我們存放在同乙個資料庫中的資料分散存放到多個資料庫(主機)上面以達到分散單庫(主機)負載的效果。
第一步,首選垂直拆分
乙個資料庫由很多表的構成,每個表對應著不同的業務,垂直切分是指按照業務將表進行分類,分布到不同的資料庫上面,這樣也就將資料或者說壓力分擔到不同的庫上面 。
比如**中期開始的資料庫端按照業務垂直拆分:按照業務交易資料庫、使用者資料庫、商品資料庫、店鋪資料庫等進行拆分。
採用垂直拆分優點:1. 拆分後業務清晰,拆分規則明確。2. 系統之間整合或擴充套件容易。3. 資料維護簡單。缺點:1. 部分業務表無法join,只能通過介面方式解決,提高了系統複雜度。2. 受每種業務不同的限制存在單庫效能瓶頸,不易資料擴充套件跟效能提高。3. 事務處理複雜。
第二步:其次才是水平拆分
水平拆分的典型場景就是大家熟知的分庫分表。
垂直拆分後遇到單機瓶頸,可以使用水平拆分。相對於垂直拆分的區別是:垂直拆分是把不同的表拆到不同的資料庫中,而水平拆分是把同乙個表拆到不同的資料庫中。
相對於垂直拆分,水平拆分不是將表的資料做分類,而是按照某個欄位的某種規則來分散到多個庫之中,每個表中包含一部分資料。簡單來說,我們可以將資料的水平切分理解為是按照資料行的切分,就是將表中 的某些行切分到乙個資料庫,而另外的某些行又切分到其他的資料庫中。
分庫分表需要涉及到對應的sql路由規則主庫備庫等,例如:**設計了一套tddl來解決這些問題,應用端只需配置對應的規則即可,對應用端的沒有任何侵入的設計。
水平拆分,總之,一般先分庫,如果分庫後查詢仍然慢,於是按照分庫的思想開始做分表的工作資料庫採用分布式資料庫(所有節點的資料加起來才算是整體資料),檔案系統採用分布式檔案系統任何強大的單一伺服器都滿足不了大型系統持續增長的業務需求,資料庫讀寫分離隨著業務的發展最終也將無法滿足需求,需要使用分布式資料庫及分布式檔案系統來支撐。
總結,資料庫拆分原則:
1.優先考慮快取降低對資料庫的讀操作。
2.再考慮讀寫分離,降低資料庫寫操作。
3.最後開始資料拆分,切分模式: 首先垂直(縱向)拆分、再次水平拆分。
4.首先考慮按照業務垂直拆分。
5.再考慮水平拆分:先分庫(設定資料路由規則,把資料分配到不同的庫中)
6.最後再考慮分表,單錶拆分到資料1000萬以內。
資料庫優化 水平拆分 垂直拆分
垂直 縱向 拆分 是指按功能模組拆分,比如分為訂單庫 商品庫 使用者庫.這種方式多個資料庫之間的表結構不同。水平 橫向 拆分 將同乙個表的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同。縱向拆分 橫向拆分 1,實現原理 使用垂直拆分,主要要看應用型別是否合適這種拆分方式,如系統可以分...
資料庫優化 水平拆分 垂直拆分
垂直 縱向 拆分 是指按功能模組拆分,比如分為訂單庫 商品庫 使用者庫.這種方式多個資料庫之間的表結構不同。水平 橫向 拆分 將同乙個表的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同。縱向拆分 橫向拆分 1,實現原理 使用垂直拆分,主要要看應用型別是否合適這種拆分方式,如系統可以分...
資料庫優化 水平拆分 垂直拆分
通過某種特定的條件,將存放在同乙個資料庫中的資料分散存放到多個資料庫上,實現分布儲存。通過路由規則路由訪問特定的資料庫,這樣一來每次訪問面對的就不是單台 伺服器了,而是n臺 伺服器,這樣就可以降低單台機器的負載壓力。垂直 縱向 拆分 是指按功能模組拆分,比如分為訂單庫 商品庫 使用者庫.這種方式多個...