資料庫水平擴充套件與垂直擴充套件
在網際網路應用中。資料庫經常是我們儲存和訪問資料的經常使用介質。隨著負載的增大,對資料庫讀寫效能的要求往往成為非常大的挑戰。在這種情況下我們能夠考慮資料庫相關的replication機制提高讀寫的效能。因為一般採用一寫多讀的replication機制(寫master同步到多個slaves),導致這種機制往往會有缺陷。首先它依賴於讀寫的比例,假設寫的操作過多,導致master往往成為效能的瓶頸所在,從而使得slaves的資料同步延遲也變大,進而大大消耗CPU的資源,而且導致資料的不一致從而影響到使用者的體驗。
這個時候我們就要考慮使用資料庫的sharding(分片)機制,這裡面我們所說sharding機制並非一個數據庫軟體的附屬功能,而是一種相對簡樸的軟體理念。
一般我們把sharding機制分成水平擴充套件(橫向擴充套件,或者向外擴充套件)和垂直擴充套件兩種方式。
詳細什麼是資料庫的水平擴充套件和垂直擴充套件呢?我們以以下的樣例來說明。
比方我們如今有兩個表:使用者資訊表 產品訂單表
水平的拆分的方案,即不改動資料庫表結構。通過對錶中資料的拆分而達到分片的目的:
1)使用使用者id做hash,分解資料庫,在訪問資料庫的使用使用者id做路由。
2)將產品訂單表依照已下單和未下單區分成兩個表。
一般水平拆分在查詢資料庫的時候可能會用到union操作。
垂直拆分的方案:將表和表分離,或者改動表結構,依照訪問的差異將某些列拆分出去。
1)將使用者資訊表放到一個數據庫server,將產品訂單表放到一個數據庫server。
2)將使用者資訊表中主碼(通常是user id)和一些經常使用的資訊放到一個表,將主碼和不經常使用的資訊放到另外的表。這導致一般查詢資料的時候可能會用到join操作。
在資料庫的設計中,我們更關注資料庫的水平擴充套件的能力。