數據庫的水平擴展與垂直擴展


數據庫水平擴展與垂直擴展

          在互聯網應用中。數據庫經常是我們存儲和訪問數據的經常使用介質。隨着負載的增大,對數據庫讀寫性能的要求往往成為非常大的挑戰。在這種情況下我們能夠考慮數據庫相關的replication機制提高讀寫的性能。因為一般採用一寫多讀的replication機制(寫master同步到多個slaves),導致這種機制往往會有缺陷。首先它依賴於讀寫的比例,假設寫的操作過多,導致master往往成為性能的瓶頸所在,從而使得slaves的數據同步延遲也變大,進而大大消耗CPU的資源,而且導致數據的不一致從而影響到用戶的體驗。

       這個時候我們就要考慮使用數據庫的sharding(分片)機制,這里面我們所說sharding機制並非一個數據庫軟件的附屬功能,而是一種相對簡朴的軟件理念。

一般我們把sharding機制分成水平擴展(橫向擴展,或者向外擴展)和垂直擴展兩種方式。

詳細什么是數據庫的水平擴展和垂直擴展呢?我們以以下的樣例來說明。

       比方我們如今有兩個表:用戶信息表 產品訂單表

       水平的拆分的方案,即不改動數據庫表結構。通過對表中數據的拆分而達到分片的目的:

1)使用用戶id做hash,分解數據庫,在訪問數據庫的使用用戶id做路由。

2)將產品訂單表依照已下單和未下單區分成兩個表。

       一般水平拆分在查詢數據庫的時候可能會用到union操作。

 

垂直拆分的方案:將表和表分離,或者改動表結構,依照訪問的差異將某些列拆分出去。

         1)將用戶信息表放到一個數據庫server,將產品訂單表放到一個數據庫server。

         2)將用戶信息表中主碼(通常是user id)和一些經常使用的信息放到一個表,將主碼和不經常使用的信息放到另外的表。這導致一般查詢數據的時候可能會用到join操作。

在數據庫的設計中,我們更關注數據庫的水平擴展的能力。


免責聲明!

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



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