搜尋
首頁資料庫mysql教程細說MySql中的分錶、分庫、分片和分區

##一、前言

#資料庫的資料量達到某程度之後,為避免帶來系統效能上的瓶頸。需要進行資料的處理,採用的手段是分區、分片、分庫、分錶。

二、分片(類似分庫)

分片是把資料庫橫向擴展(Scale Out)到多個實體節點上的一種有效的方式,其主要目的是為突破單節點資料庫伺服器的I/O 能力限制,解決資料庫擴充性問題。 Shard這個字的意思是「碎片」。如果將資料庫當作一塊大玻璃,將這塊玻璃打碎,那麼每一小塊都稱為資料庫的碎片(DatabaseShard)。將整個資料庫打碎的過程就叫做分片,可以翻譯為分片。

形式上,分片可以簡單定義為將大資料庫分散到多個實體節點上的一個分區方案。每一個分區包含資料庫的某一部分,稱為一個片,分區方式可以是任意的,並不限於傳統的水平分區和垂直分區。一個分片可以包含多個表的內容甚至可以包含多個資料庫實例中的內容。每個分片被放置在一個資料庫伺服器上。一個資料庫伺服器可以處理一個或多個分片的資料。系統中需要有伺服器進行查詢路由轉發,負責將查詢轉送到包含該查詢所存取資料的分片或分片集合節點上去執行。

三、Scale Out/Scale Up 和 垂直切分/水平分割

Mysql的擴充方案包括Scale Out和Scale Up兩種。

Scale Out(橫向擴展)是指Application可以在水平方向上擴展。一般對資料中心的應用而言,Scale out指的是當增加更多的機器時,應用仍然可以很好的利用這些機器的資源來提升自己的效率從而達到很好的擴展性。

Scale Up(縱向擴充)是指Application可以在垂直方向上擴充。一般對單一機器而言,Scale Up值得是當某個計算節點(機器)添加更多的CPU Cores,存儲設備,使用更大的內存時,應用可以很充分的利用這些資源來提升自己的效率從而達到很好的擴充性。

MySql的Sharding策略包括垂直切分和水平切分兩種。

垂直(縱向)拆分:是指按功能模組拆分,以解決表格與表格之間的io競爭。例如分為訂單庫、商品庫、使用者庫…這種方式多個資料庫之間的表格結構不同。

水平(橫向)拆分:將同一個表的資料進行分塊保存到不同的資料庫中,來解決單表中資料量增長出現的壓力。這些資料庫中的表格結構完全相同。

表格結構設計垂直切分。常見的一些場景包括

  • 大字段的垂直切分。單獨將大字段建在另外的表中,提高基礎表的存取性能,原則上在性能關鍵的應用中應避免資料庫的大字段

  • 按照使用用途垂直切分。例如企業物料屬性,可以依照基本屬性、銷售屬性、採購屬性、生產製造屬性、財務會計屬性等用途垂直切分

  • 依照存取頻率垂直切分。例如電子商務、Web 2.0系統中,如果使用者屬性設定非常多,可以將基本、使用頻繁的屬性和不常用的屬性垂直切分開

表格結構設計水平切分。常見的一些場景包括

  • 例如線上電子商務網站,訂單表資料量過大,按照年度、每月水準切分

  • Web 2.0網站註冊用戶、線上活躍用戶過多,按照用戶ID範圍等方式,將相關用戶以及該用戶緊密關聯的表做水平切分

  • 例如論壇的置頂帖子,因為涉及到分頁問題,每頁都需要顯示置頂貼,這種情況可以把置頂貼水平切分開來,避免取置頂帖子時從所有帖子的表中讀取

四、分錶和分區

分錶從表面意思說就是把一張表分成多個小表,分區則是把一張表的資料分成N多個區區塊,這些區塊可以在同一個磁碟上,也可以在不同的磁碟上。

    實作方式上
mysql的分錶是真正的分錶,一張表分成很多表後,每一個小表都是完正的一張表,都對應三個文件(MyISAM引擎:一個.MYD數據文件,.MYI索引文件,.frm表結構文件)。

  • 資料處理上

分錶後資料都是存放在分錶裡,總表只是一個外殼,存取資料發生在一個一個的分錶裡面。分區則不存在分錶的概念,分區只不過把存放資料的檔案分成了許多小塊,分區後的表還是一張表,資料處理還是由自己來完成。

  • 提高效能上

分錶後,單表的並發能力提高了,磁碟I/O效能也提高了。分割區突破了磁碟I/O瓶頸,想提高磁碟的讀寫能力,來增加mysql效能。

在這一點上,分區和分錶的測重點不同,分錶重點是訪問資料時,如何提高mysql並發能力上;而分區呢,如何突破磁碟的讀寫能力,從而達到提高mysql效能的目的。

  • 實現的難易度上

分錶的方法有很多,用merge來分錶,是最簡單的一種方式。這種方式和分區難易度差不多,而且對程式碼來說可以做到透明的。如果是用其他分錶方式就比分區麻煩了。分區實作是比較簡單的,建立分區表,跟建平常的表沒什麼差別,對程式碼端來說是透明的。

分割區的適用場景

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

  2. 表中的數據是分段的

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

CREATE TABLE sales (

    id INT AUTO_INCREMENT,

    amount DOUBLE NOT NULL,

    order_day DATETIME NOT NULL,

    PRIMARY KEY(id, order_day)) ENGINE=InnodbPARTITION 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);

分錶的適用場景

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

  2. 當頻繁插入或聯合查詢時,速度變慢。

分錶的實作需要業務結合實作與遷移,較為複雜。

五、分錶與分庫

分錶能夠解決單表資料量過大帶來的查詢效率下降的問題,但是,卻無法給資料庫的並發處理能力帶來質的提升。面對高並發的讀寫訪問,當資料庫master伺服器無法承載寫入操作壓力時,不管如何擴展slave伺服器,此時都沒有意義了。因此,我們必須換個思路,對資料庫進行拆分,從而提高資料庫寫入能力,這就是所謂的分庫。

與分錶策略相似,分庫可以採用透過一個關鍵字取模的方式,來對資料存取進行路由,如下圖所示

細說MySql中的分錶、分庫、分片和分區

六、分區與分片區別原文

細說MySql中的分錶、分庫、分片和分區

推薦學習:《mysql影片教學

以上是細說MySql中的分錶、分庫、分片和分區的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:learnku。如有侵權,請聯絡admin@php.cn刪除
解釋酸的特性(原子,一致性,隔離,耐用性)。解釋酸的特性(原子,一致性,隔離,耐用性)。Apr 16, 2025 am 12:20 AM

ACID屬性包括原子性、一致性、隔離性和持久性,是數據庫設計的基石。 1.原子性確保事務要么完全成功,要么完全失敗。 2.一致性保證數據庫在事務前後保持一致狀態。 3.隔離性確保事務之間互不干擾。 4.持久性確保事務提交後數據永久保存。

MySQL:數據庫管理系統與編程語言MySQL:數據庫管理系統與編程語言Apr 16, 2025 am 12:19 AM

MySQL既是數據庫管理系統(DBMS),也與編程語言緊密相關。 1)作為DBMS,MySQL用於存儲、組織和檢索數據,優化索引可提高查詢性能。 2)通過SQL與編程語言結合,嵌入在如Python中,使用ORM工具如SQLAlchemy可簡化操作。 3)性能優化包括索引、查詢、緩存、分庫分錶和事務管理。

mySQL:使用SQL命令管理數據mySQL:使用SQL命令管理數據Apr 16, 2025 am 12:19 AM

MySQL使用SQL命令管理數據。 1.基本命令包括SELECT、INSERT、UPDATE和DELETE。 2.高級用法涉及JOIN、子查詢和聚合函數。 3.常見錯誤有語法、邏輯和性能問題。 4.優化技巧包括使用索引、避免SELECT*和使用LIMIT。

MySQL的目的:有效存儲和管理數據MySQL的目的:有效存儲和管理數據Apr 16, 2025 am 12:16 AM

MySQL是一種高效的關係型數據庫管理系統,適用於存儲和管理數據。其優勢包括高性能查詢、靈活的事務處理和豐富的數據類型。實際應用中,MySQL常用於電商平台、社交網絡和內容管理系統,但需注意性能優化、數據安全和擴展性。

SQL和MySQL:了解關係SQL和MySQL:了解關係Apr 16, 2025 am 12:14 AM

SQL和MySQL的關係是標準語言與具體實現的關係。 1.SQL是用於管理和操作關係數據庫的標準語言,允許進行數據的增、刪、改、查。 2.MySQL是一個具體的數據庫管理系統,使用SQL作為其操作語言,並提供高效的數據存儲和管理。

說明InnoDB重做日誌和撤消日誌的作用。說明InnoDB重做日誌和撤消日誌的作用。Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?在解釋輸出(類型,鍵,行,額外)中要查找的關鍵指標是什麼?Apr 15, 2025 am 12:15 AM

EXPLAIN命令的關鍵指標包括type、key、rows和Extra。 1)type反映查詢的訪問類型,值越高效率越高,如const優於ALL。 2)key顯示使用的索引,NULL表示無索引。 3)rows預估掃描行數,影響查詢性能。 4)Extra提供額外信息,如Usingfilesort提示需要優化。

在解釋中使用臨時狀態以及如何避免它是什麼?在解釋中使用臨時狀態以及如何避免它是什麼?Apr 15, 2025 am 12:14 AM

Usingtemporary在MySQL查詢中表示需要創建臨時表,常見於使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通過優化索引和重寫查詢避免其出現,提升查詢性能。具體來說,Usingtemporary出現在EXPLAIN輸出中時,意味著MySQL需要創建臨時表來處理查詢。這通常發生在以下情況:1)使用DISTINCT或GROUPBY時進行去重或分組;2)ORDERBY包含非索引列時進行排序;3)使用複雜的子查詢或聯接操作。優化方法包括:1)為ORDERBY和GROUPB

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用