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

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

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

       這個時候我們就要考慮使用數據庫的sharding(分片)機制,這裏面我們所說sharding機制並不是一個數據庫軟件的附屬功能,而是一種相對簡樸的軟件理念。一般我們把sharding機制分成水平擴展(橫向擴展,或者向外擴展)和垂直擴展兩種方式。具體什麼是數據庫的水平擴展和垂直擴展呢?我們以下面的例子來說明。

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

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

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

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

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

 

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章