資料庫水平垂直拆分及解決方案

2021-08-31 01:10:58 字數 780 閱讀 6399

當資料庫量非常大的時候,db 已經成為系統瓶頸時就可以考慮進行水平垂直拆分了。

一般水平拆分是根據表中的某一欄位(通常是主鍵 id )取模處理,將一張表的資料拆分到多個表中。這樣每張表的表結構是相同的但是資料不同。

不但可以通過 id 取模分表還可以通過時間分表,比如每月生成一張表。 按照範圍分表也是可行的:一張表只儲存0~1000w的資料,超過只就進行分表,這樣分表的優點是擴充套件靈活,但是存在熱點資料。

按照取模分表拆分之後我們的查詢、修改、刪除也都是取模。比如新增一條資料的時候往往需要一張臨時表來生成 id,然後根據生成的 id 取模計算出需要寫入的是哪張表(也可以使用分布式 id 生成器來生成 id)。

分表之後不能避免的就是查詢要比以前複雜,通常不建議join,一般的做法是做兩次查詢。

當一張表的字段過多時則可以考慮垂直拆分。 通常是將一張表的字段才分為主表以及擴充套件表,使用頻次較高的字段在一張表,其餘的在一張表。

這裡的多表查詢也不建議使用join,依然建議使用兩次查詢。

拆分之後由一張表變為了多張表,乙個庫變為了多個庫。最突出的乙個問題就是事務如何保證。

如果業務對強一致性要求不是那麼高那麼最終一致性則是一種比較好的方案。

通常的做法就是補償,比如 乙個業務是 a 呼叫 b,兩個執行成功才算最終成功,當 a 成功之後,b 執行失敗如何來通知 a 呢。

比較常見的做法是 失敗時 b 通過 mq 將訊息告訴 a,a 再來進行回滾。這種的前提是 a 的回滾操作得是冪等的,不然 b 重**訊息就會出現問題。

資料庫優化 水平拆分 垂直拆分

垂直 縱向 拆分 是指按功能模組拆分,比如分為訂單庫 商品庫 使用者庫.這種方式多個資料庫之間的表結構不同。水平 橫向 拆分 將同乙個表的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同。縱向拆分 橫向拆分 1,實現原理 使用垂直拆分,主要要看應用型別是否合適這種拆分方式,如系統可以分...

資料庫優化 水平拆分 垂直拆分

垂直 縱向 拆分 是指按功能模組拆分,比如分為訂單庫 商品庫 使用者庫.這種方式多個資料庫之間的表結構不同。水平 橫向 拆分 將同乙個表的資料進行分塊儲存到不同的資料庫中,這些資料庫中的表結構完全相同。縱向拆分 橫向拆分 1,實現原理 使用垂直拆分,主要要看應用型別是否合適這種拆分方式,如系統可以分...

資料庫優化 水平拆分 垂直拆分

通過某種特定的條件,將存放在同乙個資料庫中的資料分散存放到多個資料庫上,實現分布儲存。通過路由規則路由訪問特定的資料庫,這樣一來每次訪問面對的就不是單台 伺服器了,而是n臺 伺服器,這樣就可以降低單台機器的負載壓力。垂直 縱向 拆分 是指按功能模組拆分,比如分為訂單庫 商品庫 使用者庫.這種方式多個...