【產品常識】如何解決電商系統數據承載過大?

初創企業在發展過程中,一般不會遇到類似問題,但是隨著業務量的增加,特別是電商系統,由于每日的訂單數量過多,導致數據庫的承載量過大,更換服務器的成本很大,所以如何來合理解決電商系統數據承載過大的問題呢?

1、從初始階段,這應該是屬于系統架構師應該考慮進去的事情,所以這項工作應該由架構師來完成;

2、如果沒有合理的架構,那么在需要解決這個問題的時候,可以通過數據庫分庫,分表、切片的方式來進行。(再次強調這是個技術問題,產品不背鍋)

數據庫為什么要分庫分表?

顧名思義,就是把原本存儲于一個庫的數據分塊存儲到多個庫上,把原本存儲于一個表的數據分塊存儲到多個表上。

在未進行分庫分表的情況下,隨著時間和業務的發展,庫中的表會越來越多,表中的數據量也會越來越大,相應地,數據操作,增刪改查的開銷也會越來越大;另外,由于無法進行分布式式部署,而一臺服務器的資源(CPU、磁盤、內存、IO等)是有限的,最終數據庫所能承載的數據量、數據處理能力都將遭遇瓶頸。

分庫分表一般有垂直切分和水平切分兩種方法

1、垂直切分,即將表按照功能模塊、關系密切程度劃分出來,部署到不同的庫上。例如,我們會建立定義數據庫workDB、商品數據庫payDB、用戶數據庫userDB、日志數據庫logDB等,分別用于存儲項目數據定義表、商品定義表、用戶數據表、日志數據表等。

2、水平切分,當一個表中的數據量過大時,我們可以把該表的數據按照某種規則,例如userID散列,進行劃分,然后存儲到多個結構相同的表,和不同的庫上。例如,我們的userDB中的用戶數據表中,每一個表的數據量都很大,就可以把userDB切分為結構相同的多個userDB:part0DB、part1DB等,再將userDB上的用戶數據表userTable,切分為很多userTable:userTable0、userTable1等,然后將這些表按照一定的規則存儲到多個userDB上。

如何合理選擇切分的方式,應該通過具體業務類型進行考慮。

如果數據庫是因為表太多而造成海量數據,并且項目的各項業務邏輯劃分清晰、低耦合,那么規則簡單明了、容易實施的垂直切分必是首選。

而如果數據庫中的表并不多,但單表的數據量很大、或數據熱度很高,這種情況之下就應該選擇水平切分,水平切分比垂直切分要復雜一些,它將原本邏輯上屬于一體的數據進行了物理分割,除了在分割時要對分割的粒度做好評估,考慮數據平均和負載平均,后期也將對項目人員及應用程序產生額外的數據管理負擔。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容