LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

分庫分表與讀寫分離的實現原理詳解

admin
2025年6月28日 22:0 本文熱度 224

最近有同學留言說公司數據量比較大,需要涉及到分庫分表等方案。

這里會涉及到:如何來分?是先分區?還是先分庫?怎么分表等問題?

本篇就重點來談談應對數據量大的拆分等方案@mikechen

為什么要分庫分表和讀寫分離?


類似淘寶網這樣的網站,海量數據的存儲和訪問成為了系統設計的瓶頸問題,日益增長的業務數據,無疑對數據庫造成了相當大的負載,同時對于系統的穩定性和擴展性提出很高的要求。

隨著時間和業務的發展,數據庫中的表會越來越多,表中的數據量也會越來越大,相應地,數據操作的開銷也會越來越大。

另外,無論怎樣升級硬件資源,單臺服務器的資源(CPU、磁盤、內存、網絡IO、事務數、連接數)總是有限的,最終數據庫所能承載的數據量、數據處理能力都將遭遇瓶頸。分表、分庫和讀寫分離可以有效地減小單臺數據庫的壓力。


分庫分表的原理和實現


1.什么是分區、分表、分庫

分區

就是把一張表的數據分成N個區塊,在邏輯上看最終只是一張表,但底層是由N個物理區塊組成的,分區實現比較簡單,數據庫mysql、oracle等很容易就可支持。

分表

就是把一張表按一定的規則分解成N個具有獨立存儲空間的實體表。系統讀寫時需要根據定義好的規則得到對應的字表明,然后操作它。

分庫

一旦分表,一個庫中的表會越來越多

將整個數據庫比作圖書館,一張表就是一本書。當要在一本書中查找某項內容時,如果不分章節,查找的效率將會下降。而同理,在數據庫中就是分區。

2.什么時候考慮使用分區?

一張表的查詢速度已經慢到影響使用的時候。

  • sql經過優化

  • 數據量大

  • 表中的數據是分段的

  • 對數據的操作往往只涉及一部分數據,而不是所有的數據

分區解決的問題

主要可以提升查詢效率

分區的實現方式(簡單),例如:

mysql5 開始支持分區功能

CREATE TABLE sales (

id INT AUTO_INCREMENT,

amount DOUBLE NOT NULL,

order_day DATETIME NOT NULL,

PRIMARY KEY(id, order_day)

) ENGINE=Innodb

PARTITION BY RANGE(YEAR(order_day)) (

PARTITION p_2010 VALUES LESS THAN (2010),

PARTITION p_2011 VALUES LESS THAN (2011),

PARTITION p_2012 VALUES LESS THAN (2012),

PARTITION p_catchall VALUES LESS THAN MAXVALUE);

3.什么時候考慮分表?

  • 一張表的查詢速度已經慢到影響使用的時候。

  • sql經過優化

  • 數據量大

  • 當頻繁插入或者聯合查詢時,速度變慢

4.分表解決的問題

分表后,單表的并發能力提高了,磁盤I/O性能也提高了,寫操作效率提高了

  • 查詢一次的時間短了

  • 數據分布在不同的文件,磁盤I/O性能提高

  • 讀寫鎖影響的數據量變小

  • 插入數據庫需要重新建立索引的數據減少

5.分表的實現方式(復雜)

需要業務系統配合遷移升級,工作量較大。

6.常見分表、分庫常用策略:

1.平均進行分配hash(object)%N(適用于簡單架構)。

2.按照權重進行分配且均勻輪詢。

3.按照業務進行分配。

4.按照一致性hash算法進行分配(適用于集群架構,在集群中節點的添加和刪除不會造成數據丟失,方便數據遷移)。

7.分庫分表中間件

分表又分為單庫分表(表名不同)和多庫分表(表名相同),不管使用哪種策略都還需要自己去實現路由,制定路由規則等,可以考慮使用開源的分庫分表中間件,無侵入應用設計。



讀寫分離的原理和實現


1、什么是讀寫分離

讀寫分離,基本的原理是讓主數據庫處理事務性增、改、刪操作(INSERT、UPDATE、DELETE),而從數據庫處理SELECT查詢操作。數據庫復制被用來把事務性操作導致的變更同步到集群中的從數據庫。

2、為什么要讀寫分離呢?

因為數據庫的“寫”(寫10000條數據到oracle可能要3分鐘)操作是比較耗時的。

但是數據庫的“讀”(從oracle讀10000條數據可能只要5秒鐘)。

所以讀寫分離,解決的是,數據庫的寫入,影響了查詢的效率。

3、什么時候要讀寫分離?

數據庫不一定要讀寫分離,如果程序使用數據庫較多時,而更新少,查詢多的情況下會考慮使用,利用數據庫 主從同步 ??梢詼p少數據庫壓力,提高性能。當然,數據庫也有其它優化方案。memcache 或是 表折分,或是搜索引擎都是解決方法。


4.主從復制、讀寫分離的基本設計

在實際的生產環境中,對數據庫的讀和寫都在同一個數據庫服務器中,是不能滿足實際需求的。無論是在安全性、高可用性還是高并發等各個方面都是完全不能滿足實際需求的。因此,通過主從復制的方式來同步數據,再通過讀寫分離來提升數據庫的并發負載能力。

一臺主、多臺從,主提供寫操作,從提供讀操作。

讀寫分離的實現:

我們只需要實現讀寫分離,主從復制數據一般由數據庫級來實現同步,當然也可以自己去實現同步,只是需要考慮的點比較多。


分庫分表、讀寫分離總結


1.分區

對業務透明,分區只不過把存放數據的文件分成了許多小塊,根據一定的規則把數據文件(MYD)和索引文件(MYI)進行了分割,分區后的表呢,還是一張表。

2.分表

當數據量大到一定程度的時候,都會導致處理性能的不足,這個時候就沒有辦法了,只能進行分表處理。也就是把數據庫當中數據根據按照分庫原則分到多個數據表當中,這樣,就可以把大表變成多個小表,不同的分表中數據不重復,從而提高處理效率。

3.分庫

分表和分區都是基于同一個數據庫里的數據分離技巧,對數據庫性能有一定提升,但是隨著業務數據量的增加,原來所有的數據都是在一個數據庫上的,網絡IO及文件IO都集中在一個數據庫上的,因此CPU、內存、文件IO、網絡IO都可能會成為系統瓶頸。

當業務系統的數據容量接近或超過單臺服務器的容量、QPS/TPS接近或超過單個數據庫實例的處理極限等此時,往往是采用垂直和水平結合的數據拆分方法,把數據服務和數據存儲分布到多臺數據庫服務器上。

4.讀寫分離方案

當數據庫讀遠大于寫,查詢多的情況,就可以考慮主數據負責寫操作,從數據庫負責讀操作,一主多重,從而把數據讀寫分離,最后還可以結合redis等緩存來配合分擔數據的讀操作,大大的降低后端數據庫的壓力。


閱讀原文:原文鏈接


該文章在 2025/7/2 0:06:27 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
无遮挡粉嫩小泬久久久久久久 | 亚洲国产欧美丝袜精品一区 | 亚洲国产一区二区在线观看 | 中国AV免费在线播放 | 亚洲不卡AV网在线播放 | 一区二区三区在线不卡 |