數據庫的水平拆分和垂直拆分


隨着業務的發展,數據庫成為了整個系統性能的一個瓶頸,這時候就需要對數據庫進行優化,但是單單是優化只能提高有限的一點性能,這時候要想解決問題需要的是從數據庫架構層面去思考問題。數據庫的架構是一個很大的課題,里面最實用的有兩個,一個是數據庫拆分,一個是讀寫分離。今天就來談談數據庫的兩種拆分方式。

一、垂直拆分

垂直拆分很簡單,就是根據不同的業務來划分不同的數據庫。比如一個電商系統根據業務可以分成商品表、會員表、訂單表。原先,這些表都是放在同一個數據庫服務器上,現在需要垂直拆分數據庫,就是將商品表單獨放在一個數據庫中,會員表單獨放在一個數據庫中,訂單表單獨放在一個數據庫中,這樣就解決了表與表之間的io競爭。

二、水平拆分

垂直拆分比較簡單,水平拆分就比較復雜了,要考慮很多東西。垂直拆分根據業務來拆分,或者說的直白點就是根據表名來拆分,而水平拆分是根據表里面的字段來拆分(記住是根據字段來拆分,而不是拆分字段,拆分后的每一張表的表結構都是一樣)。比如要拆分用戶表,可以根據用戶的注冊時間這一字段來拆分整個表,2016年注冊的用戶放在用戶表1中,2017年注冊的用戶放在用戶表2中,2018年注冊的用戶放在用戶表3中。這就是水平拆分,看似很簡單,實際上要考慮的東西是很多的。就比如上述的例子,我們用時間來拆分,就會有局限性。一個好產品上線后,在開始的時候用戶數量都是很少的,都需要一定時間的沉淀,才會有一個用戶數量的爆發期。如果用時間來拆分,就會出現一種情況,就是用戶表1的規模很小,而用戶表2的規模卻很大,是用戶表1的好幾倍,而用戶表三可能是用戶表1的好幾十倍。這樣的話,拆分水平拆分的意義就不大了。一般用戶表都是用戶id來拆分的,具體還要結合實際業務去分析。所以,水平拆分是一件很復雜的事情,大家在進行水平拆分的時候一定要考慮到方方面面,這樣才能設計出優秀的數據庫架構方案。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM