當前位置:首頁 » 操作系統 » mysql資料庫架構

mysql資料庫架構

發布時間: 2023-01-20 05:58:12

❶ 《Mysql性能調優與架構設計》epub下載在線閱讀,求百度網盤雲資源

《MySQL性能調優與架構設計》(簡朝陽)電子書網盤下載免費在線閱讀

資源鏈接:

鏈接:https://pan..com/s/1jRNyGypVd4gXmV5-fJgA-g

提取碼:1aeg

書名:MySQL性能調優與架構設計

作者:簡朝陽

豆瓣評分:8.1

出版年份:2009-6

頁數:392

內容簡介:《MySQL性能調優與架構設計》以 MySQL 資料庫的基礎及維護為切入點,重點介紹了 MySQL 資料庫應用系統的性能調優,以及高可用可擴展的架構設計。

全書共分3篇,基礎篇介紹了MySQL軟體的基礎知識、架構組成、存儲引擎、安全管理及基本的備份恢復知識。性能優化篇從影響 MySQL 資料庫應用系統性能的因素開始,針對性地對各個影響因素進行調優分析。如 MySQL Schema 設計的技巧,Query 語句的性能優化方式方法及MySQL Server中SQL層和存儲引擎層的優化思路。同時還分析了 MySQL 資料庫中主要存儲引擎的鎖定機制。架構設計篇則主要以設計一個高可用可擴展的分布式企業級資料庫集群環境為目標,分析介紹了通過 MySQL 實現這一目標的多種架構方式。主要包括可擴展和高可用兩部分內容,可擴展部分包括設計原則、Replication 的利用、數據切分、如何使用 Cache 和 Search,以及 NDB Cluster等內容。高可用則主要包括 Dual Master、DRBD、NDB Cluster,以及系統監控等方面。

本書主要面向有一定的 MySQL 基礎或至少有一定SQL語言基礎的讀者朋友。


❷ 扛得住的MySQL資料庫架構

資料庫優化是系統工程,性能的提升靠整體。本課程將面面俱到的講解提升資料庫性能的各種因素,讓你在最短的時間從小白到資深,將資料庫整體架構瞭然於胸

第1章 實例和故事 試看7 節 | 50分鍾
決定電商11大促成敗的各個關鍵因素。
收起列表
視頻:1-1 什麼決定了電商雙11大促的成敗 (04:04)試看
視頻:1-2 在雙11大促中的資料庫伺服器 (06:03)
視頻:1-3 在大促中什麼影響了資料庫性能 (07:55)
視頻:1-4 大表帶來的問題 (14:13)
視頻:1-5 大事務帶來的問題 (17:27)
作業:1-6 【討論題】在日常工作中如何應對高並發大數據量對資料庫性能挑戰
作業:1-7 【討論題】在MySQL中事務的作用是什麼?
第2章 什麼影響了MySQL性能 試看30 節 | 210分鍾
詳細介紹影響性能各個因素,包括硬體、操作系統等等。
收起列表
視頻:2-1 影響性能的幾個方面 (04:08)試看
視頻:2-2 CPU資源和可用內存大小 (10:54)
視頻:2-3 磁碟的配置和選擇 (04:44)
視頻:2-4 使用RAID增加傳統機器硬碟的性能 (11:30)
視頻:2-5 使用固態存儲SSD或PCIe卡 (08:35)
視頻:2-6 使用網路存儲SAN和NAS (07:16)
視頻:2-7 總結:伺服器硬體對性能的影響 (03:27)
視頻:2-8 操作系統對性能的影響-MySQL適合的操作系統 (03:50)
視頻:2-9 CentOS系統參數優化 (11:43)
視頻:2-10 文件系統對性能的影響 (03:29)
視頻:2-11 MySQL體系結構 (05:29)
視頻:2-12 MySQL常用存儲引擎之MyISAM (13:23)
視頻:2-13 MySQL常用存儲引擎之Innodb (10:44)
視頻:2-14 Innodb存儲引擎的特性(1) (15:24)
視頻:2-15 Innodb存儲引擎的特性(2) (08:44)
視頻:2-16 MySQL常用存儲引擎之CSV (09:19)
視頻:2-17 MySQL常用存儲引擎之Archive (06:08)
視頻:2-18 MySQL常用存儲引擎之Memory (10:40)
視頻:2-19 MySQL常用存儲引擎之Federated (11:21)
視頻:2-20 如何選擇存儲引擎 (04:33)
視頻:2-21 MySQL伺服器參數介紹 (08:04)
視頻:2-22 內存配置相關參數 (09:24)
視頻:2-23 IO相關配置參數 (10:01)
視頻:2-24 安全相關配置參數 (06:13)
視頻:2-25 其它常用配置參數 (03:41)
視頻:2-26 資料庫設計對性能的影響 (04:36)
視頻:2-27 總結 (01:32)
作業:2-28 【討論題】你會如何配置公司的資料庫伺服器硬體?
作業:2-29 【討論題】你認為對資料庫性能影響最大的因素是什麼
作業:2-30 【討論題】做為電商的DBA,建議開發選哪種MySQL存儲引擎
第3章 MySQL基準測試8 節 | 65分鍾
了解基準測試,MySQL基準測試工具介紹及實例演示。
收起列表
視頻:3-1 什麼是基準測試 (02:20)
視頻:3-2 如何進行基準測試 (09:00)
視頻:3-3 基準測試演示實例 (11:18)
視頻:3-4 Mysql基準測試工具之mysqlslap (13:30)
視頻:3-5 Mysql基準測試工具之sysbench (11:07)
視頻:3-6 sysbench基準測試演示實例 (17:11)
作業:3-7 【討論題】MySQL基準測試是否可以體現出業務系統的真實性能
作業:3-8 【實操題】參數不同取值對性能的影響
第4章 MySQL資料庫結構優化14 節 | 85分鍾
詳細介紹資料庫結構設計、範式和反範式設計、物理設計等等。
收起列表
視頻:4-1 資料庫結構優化介紹 (06:52)
視頻:4-2 資料庫結構設計 (14:49)
視頻:4-3 需求分析及邏輯設計 (11:00)
視頻:4-4 需求分析及邏輯設計-反範式化設計 (06:44)
視頻:4-5 範式化設計和反範式化設計優缺點 (04:06)
視頻:4-6 物理設計介紹 (05:17)
視頻:4-7 物理設計-數據類型的選擇 (18:59)
視頻:4-8 物理設計-如何存儲日期類型 (13:37)
視頻:4-9 物理設計-總結 (02:37)
圖文:4-10 說明MyISAM和Innodb存儲引擎的5點不同
作業:4-11 【討論題】判斷表結構是否符合第三範式要求?如不滿足要如何修改
作業:4-12 【實操題】請設計一個電商訂單系統的資料庫結構
作業:4-13 【討論題】以下那個欄位適合作為Innodb表的主建使用
作業:4-14 【討論題】請為下表中的欄位選擇合適的數據類型
第5章 MySQL高可用架構設計 試看24 節 | 249分鍾
詳細介紹二進制日誌及其對復制的影響、GTID的復制、MMM、MHA等等。
收起列表
視頻:5-1 mysql復制功能介紹 (04:58)
視頻:5-2 mysql二進制日誌 (22:05)
視頻:5-3 mysql二進制日誌格式對復制的影響 (09:37)
視頻:5-4 mysql復制工作方式 (03:08)
視頻:5-5 基於日誌點的復制 (20:06)
視頻:5-6 基於GTID的復制 (22:32)
視頻:5-7 MySQL復制拓撲 (13:58)
視頻:5-8 MySQL復制性能優化 (09:23)
視頻:5-9 MySQL復制常見問題處理 (08:31)
視頻:5-10 什麼是高可用架構 (14:09)
視頻:5-11 MMM架構介紹 (08:09)
視頻:5-12 MMM架構實例演示(上) (09:16)試看
視頻:5-13 MMM架構實例演示(下) (18:55)
視頻:5-14 MMM架構的優缺點 (08:01)
視頻:5-15 MHA架構介紹 (10:02)
視頻:5-16 MHA架構實例演示(1) (13:11)
視頻:5-17 MHA架構實例演示(2) (16:54)
視頻:5-18 MHA架構優缺點 (05:14)
視頻:5-19 讀寫分離和負載均衡介紹 (11:42)
視頻:5-20 MaxScale實例演示 (18:25)
作業:5-21 【討論題】MySQL主從復制為什麼會有延遲,延遲又是如何產生
作業:5-22 【實操題】請為某互聯網項目設計99.99%MySQL架構
作業:5-23 【討論題】如何給一個已經存在的主從復制集群新增一個從節點
作業:5-24 【討論題】給你三台資料庫伺服器,你如何設計它的高可用架構
第6章 資料庫索引優化8 節 | 65分鍾
介紹BTree索引和Hash索引,詳細介紹索引的優化策略等等。
收起列表
視頻:6-1 Btree索引和Hash索引 (20:09)
視頻:6-2 安裝演示資料庫 (01:19)
視頻:6-3 索引優化策略(上) (17:33)
視頻:6-4 索引優化策略(中) (13:02)
視頻:6-5 索引優化策略(下) (12:30)
作業:6-6 【討論題】一列上建立了索引,查詢時就一定會用到這個索引嗎
作業:6-7 【討論題】在定義聯合索引時為什麼需要注意聯合索引中的順序
作業:6-8 【實操題】SQL建立索引,你會考慮那些因素
第7章 SQL查詢優化9 節 | 62分鍾
詳細介紹慢查詢日誌及示例演示,MySQL查詢優化器介紹及特定SQL的查詢優化等。
收起列表
視頻:7-1 獲取有性能問題SQL的三種方法 (05:14)
視頻:7-2 慢查詢日誌介紹 (08:57)
視頻:7-3 慢查詢日誌實例 (08:27)
視頻:7-4 實時獲取性能問題SQL (02:21)
視頻:7-5 SQL的解析預處理及生成執行計劃 (16:02)
視頻:7-6 如何確定查詢處理各個階段所消耗的時間 (09:35)
視頻:7-7 特定SQL的查詢優化 (10:34)
作業:7-8 【討論題】如何跟據需要對一個大表中的數據進行刪除或更新
作業:7-9 【討論題】如何獲取需要優化的SQL查詢
第8章 資料庫的分庫分表5 節 | 48分鍾
詳細介紹資料庫分庫分表的實現原理及演示案例等。
收起列表
視頻:8-1 資料庫分庫分表的幾種方式 (04:34)
視頻:8-2 資料庫分片前的准備 (13:53)
視頻:8-3 資料庫分片演示(上) (11:40)
視頻:8-4 資料庫分片演示(下) (17:02)
作業:8-5 【討論題】對於大表來說我們一定要進行分庫分表嗎
第9章 資料庫監控7 節 | 29分鍾
介紹資料庫可用性監控、性能監控、MySQL主從復制監控等
收起列表
視頻:9-1 資料庫監控介紹 (04:46)
視頻:9-2 資料庫可用性監控 (07:20)
視頻:9-3 資料庫性能監控 (09:39)
視頻:9-4 MySQL主從復制監控 (06:16)
作業:9-5 【討論題】QPS是否可以真實的反映出資料庫的負載情況
作業:9-6 【討論題】如何正確評估資料庫的當前負載狀況
作業:9-7 【實操題】開發一個簡單監控腳本,監控mySQL資料庫阻塞情況

❸ 五大常見的MySQL高可用方案(最全)

1. 概述

我們在考慮MySQL資料庫的高可用的架構時,主要要考慮如下幾方面:

如果資料庫發生了宕機或者意外中斷等故障,能盡快恢復資料庫的可用性,盡可能的減少停機時間,保證業務不會因為資料庫的故障而中斷。

用作備份、只讀副本等功能的非主節點的數據應該和主節點的數據實時或者最終保持一致。

當業務發生資料庫切換時,切換前後的資料庫內容應當一致,不會因為數據缺失或者數據不一致而影響業務。

關於對高可用的分級在這里我們不做詳細的討論,這里只討論常用高可用方案的優缺點以及高可用方案的選型。

2. 高可用方案

2.1. 主從或主主半同步復制

使用雙節點資料庫,搭建單向或者雙向的半同步復制。在5.7以後的版本中,由於lossless replication、logical多線程復制等一些列新特性的引入,使得MySQL原生半同步復制更加可靠。

常見架構如下:

通常會和proxy、keepalived等第三方軟體同時使用,即可以用來監控資料庫的 健康 ,又可以執行一系列管理命令。如果主庫發生故障,切換到備庫後仍然可以繼續使用資料庫。

優點:

架構比較簡單,使用原生半同步復製作為數據同步的依據;

雙節點,沒有主機宕機後的選主問題,直接切換即可;

雙節點,需求資源少,部署簡單;

缺點:

完全依賴於半同步復制,如果半同步復制退化為非同步復制,數據一致性無法得到保證;

需要額外考慮haproxy、keepalived的高可用機制。

2.2. 半同步復制優化

半同步復制機制是可靠的。如果半同步復制一直是生效的,那麼便可以認為數據是一致的。但是由於網路波動等一些客觀原因,導致半同步復制發生超時而切換為非同步復制,那麼這時便不能保證數據的一致性。所以盡可能的保證半同步復制,便可提高數據的一致性。

該方案同樣使用雙節點架構,但是在原有半同復制的基礎上做了功能上的優化,使半同步復制的機制變得更加可靠。

可參考的優化方案如下:

2.2.1. 雙通道復制

半同步復制由於發生超時後,復制斷開,當再次建立起復制時,同時建立兩條通道,其中一條半同步復制通道從當前位置開始復制,保證從機知道當前主機執行的進度。另外一條非同步復制通道開始追補從機落後的數據。當非同步復制通道追趕到半同步復制的起始位置時,恢復半同步復制。

2.2.2. binlog文件伺服器

搭建兩條半同步復制通道,其中連接文件伺服器的半同步通道正常情況下不啟用,當主從的半同步復制發生網路問題退化後,啟動與文件伺服器的半同步復制通道。當主從半同步復制恢復後,關閉與文件伺服器的半同步復制通道。

優點:

雙節點,需求資源少,部署簡單;

架構簡單,沒有選主的問題,直接切換即可;

相比於原生復制,優化後的半同步復制更能保證數據的一致性。

缺點:

需要修改內核源碼或者使用mysql通信協議。需要對源碼有一定的了解,並能做一定程度的二次開發。

依舊依賴於半同步復制,沒有從根本上解決數據一致性問題。

2.3. 高可用架構優化

將雙節點資料庫擴展到多節點資料庫,或者多節點資料庫集群。可以根據自己的需要選擇一主兩從、一主多從或者多主多從的集群。

由於半同步復制,存在接收到一個從機的成功應答即認為半同步復製成功的特性,所以多從半同步復制的可靠性要優於單從半同步復制的可靠性。並且多節點同時宕機的幾率也要小於單節點宕機的幾率,所以多節點架構在一定程度上可以認為高可用性是好於雙節點架構。

但是由於資料庫數量較多,所以需要資料庫管理軟體來保證資料庫的可維護性。可以選擇MMM、MHA或者各個版本的proxy等等。常見方案如下:

2.3.1. MHA+多節點集群

MHA Manager會定時探測集群中的master節點,當master出現故障時,它可以自動將最新數據的slave提升為新的master,然後將所有其他的slave重新指向新的master,整個故障轉移過程對應用程序完全透明。

MHA Node運行在每台MySQL伺服器上,主要作用是切換時處理二進制日誌,確保切換盡量少丟數據。

MHA也可以擴展到如下的多節點集群:

優點:

可以進行故障的自動檢測和轉移;

可擴展性較好,可以根據需要擴展MySQL的節點數量和結構;

相比於雙節點的MySQL復制,三節點/多節點的MySQL發生不可用的概率更低

缺點:

至少需要三節點,相對於雙節點需要更多的資源;

邏輯較為復雜,發生故障後排查問題,定位問題更加困難;

數據一致性仍然靠原生半同步復制保證,仍然存在數據不一致的風險;

可能因為網路分區發生腦裂現象;

2.3.2. zookeeper+proxy

Zookeeper使用分布式演算法保證集群數據的一致性,使用zookeeper可以有效的保證proxy的高可用性,可以較好的避免網路分區現象的產生。

優點:

較好的保證了整個系統的高可用性,包括proxy、MySQL;

擴展性較好,可以擴展為大規模集群;

缺點:

數據一致性仍然依賴於原生的mysql半同步復制;

引入zk,整個系統的邏輯變得更加復雜;

2.4. 共享存儲

共享存儲實現了資料庫伺服器和存儲設備的解耦,不同資料庫之間的數據同步不再依賴於MySQL的原生復制功能,而是通過磁碟數據同步的手段,來保證數據的一致性。

2.4.1. SAN共享儲存

SAN的概念是允許存儲設備和處理器(伺服器)之間建立直接的高速網路(與LAN相比)連接,通過這種連接實現數據的集中式存儲。常用架構如下:

使用共享存儲時,MySQL伺服器能夠正常掛載文件系統並操作,如果主庫發生宕機,備庫可以掛載相同的文件系統,保證主庫和備庫使用相同的數據。

優點:

兩節點即可,部署簡單,切換邏輯簡單;

很好的保證數據的強一致性;

不會因為MySQL的邏輯錯誤發生數據不一致的情況;

缺點:

需要考慮共享存儲的高可用;

價格昂貴;

2.4.2. DRBD磁碟復制

DRBD是一種基於軟體、基於網路的塊復制存儲解決方案,主要用於對伺服器之間的磁碟、分區、邏輯卷等進行數據鏡像,當用戶將數據寫入本地磁碟時,還會將數據發送到網路中另一台主機的磁碟上,這樣的本地主機(主節點)與遠程主機(備節點)的數據就可以保證實時同步。常用架構如下:

當本地主機出現問題,遠程主機上還保留著一份相同的數據,可以繼續使用,保證了數據的安全。

DRBD是linux內核模塊實現的快級別的同步復制技術,可以與SAN達到相同的共享存儲效果。

優點:

兩節點即可,部署簡單,切換邏輯簡單;

相比於SAN儲存網路,價格低廉;

保證數據的強一致性;

缺點:

對io性能影響較大;

從庫不提供讀操作;

2.5. 分布式協議

分布式協議可以很好解決數據一致性問題。比較常見的方案如下:

2.5.1. MySQL cluster

MySQL cluster是官方集群的部署方案,通過使用NDB存儲引擎實時備份冗餘數據,實現資料庫的高可用性和數據一致性。

優點:

全部使用官方組件,不依賴於第三方軟體;

可以實現數據的強一致性;

缺點:

國內使用的較少;

配置較復雜,需要使用NDB儲存引擎,與MySQL常規引擎存在一定差異;

至少三節點;

2.5.2. Galera

基於Galera的MySQL高可用集群, 是多主數據同步的MySQL集群解決方案,使用簡單,沒有單點故障,可用性高。常見架構如下:

優點:

多主寫入,無延遲復制,能保證數據強一致性;

有成熟的社區,有互聯網公司在大規模的使用;

自動故障轉移,自動添加、剔除節點;

缺點:

需要為原生MySQL節點打wsrep補丁

只支持innodb儲存引擎

至少三節點;

2.5.3. POAXS

Paxos 演算法解決的問題是一個分布式系統如何就某個值(決議)達成一致。這個演算法被認為是同類演算法中最有效的。Paxos與MySQL相結合可以實現在分布式的MySQL數據的強一致性。常見架構如下:

優點:

多主寫入,無延遲復制,能保證數據強一致性;

有成熟理論基礎;

自動故障轉移,自動添加、剔除節點;

缺點:

只支持innodb儲存引擎

至少三節點;

3. 總結

隨著人們對數據一致性的要求不斷的提高,越來越多的方法被嘗試用來解決分布式數據一致性的問題,如MySQL自身的優化、MySQL集群架構的優化、Paxos、Raft、2PC演算法的引入等等。

而使用分布式演算法用來解決MySQL資料庫數據一致性的問題的方法,也越來越被人們所接受,一系列成熟的產品如PhxSQL、MariaDB Galera Cluster、Percona XtraDB Cluster等越來越多的被大規模使用。

隨著官方MySQL Group Replication的GA,使用分布式協議來解決數據一致性問題已經成為了主流的方向。期望越來越多優秀的解決方案被提出,MySQL高可用問題可以被更好的解決。

❹ mysql資料庫管理系統基本系統架構擁有哪4大模塊

客戶端、連接層、服務層、引擎層

❺ mysql有哪些架構

了解MySql必須牢牢記住其體系結構圖,Mysql是由SQL介面,解析器,優化器,緩存,存儲引擎組成的

1 Connectors指的是不同語言中與SQL的交互

2 Management Serveices & Utilities: 系統管理和控制工具

3 Connection Pool: 連接池。

管理緩沖用戶連接,線程處理等需要緩存的需求

4 SQL Interface: SQL介面。

接受用戶的SQL命令,並且返回用戶需要查詢的結果。比如select from就是調用SQL Interface

5 Parser: 解析器。

SQL命令傳遞到解析器的時候會被解析器驗證和解析。解析器是由Lex和YACC實現的,是一個很長的腳本。

主要功能:

a . 將SQL語句分解成數據結構,並將這個結構傳遞到後續步驟,以後SQL語句的傳遞和處理就是基於這個結構的

b. 如果在分解構成中遇到錯誤,那麼就說明這個sql語句是不合理的

6 Optimizer: 查詢優化器。

SQL語句在查詢之前會使用查詢優化器對查詢進行優化。他使用的是「選取-投影-聯接」策略進行查詢。

用一個例子就可以理解: select uid,name from user where gender = 1;

這個select 查詢先根據where 語句進行選取,而不是先將表全部查詢出來以後再進行gender過濾

這個select查詢先根據uid和name進行屬性投影,而不是將屬性全部取出以後再進行過濾

將這兩個查詢條件聯接起來生成最終查詢結果

7 Cache和Buffer: 查詢緩存。

如果查詢緩存有命中的查詢結果,查詢語句就可以直接去查詢緩存中取數據。

這個緩存機制是由一系列小緩存組成的。比如表緩存,記錄緩存,key緩存,許可權緩存等

8 Engine :存儲引擎。

存儲引擎是MySql中具體的與文件打交道的子系統。也是Mysql最具有特色的一個地方。

Mysql的存儲引擎是插件式的。它根據MySql AB公司提供的文件訪問層的一個抽象介面來定製一種文件訪問機制(這種訪問機制就叫存儲引擎)

現在有很多種存儲引擎,各個存儲引擎的優勢各不一樣,最常用的MyISAM,InnoDB,BDB

默認下MySql是使用MyISAM引擎,它查詢速度快,有較好的索引優化和數據壓縮技術。但是它不支持事務。

InnoDB支持事務,並且提供行級的鎖定,應用也相當廣泛。Mysql也支持自己定製存儲引擎,甚至一個庫中不同的表使用不同的存儲引擎,這些都是允許的。

❻ MySQL資料庫的介紹

視頻講解了mysql資料庫的概念,同時也講到了資料庫系統、資料庫管理系統、表、記錄等術語以及了解了一下mysql的體系架構。本視頻是學習資料庫的零基礎視頻,是學習以後大數據的基礎。

❼ 寫入mysql資料庫的數據量很大,資料庫架構該怎麼去設計

1.設置讀寫分離

2.進行分庫分表,用中間件路由,分攤流量

3.可以先寫入mq,然後慢慢寫入

4.可以使用tidb,tps很高

❽ mysql資料庫

MySQL資料庫一般指MySQL,MySQL是一個關系型資料庫管理系統,由瑞典MySQL AB 公司開發。

mysql是目前網站以及APP應用上用得較多的一個開源的關系型資料庫系統,可以對數據進行保存,分段化的數據保存,也可以對其數據進行檢索,查詢等功能的資料庫。

默認的mysql資料庫中存有一個庫這個就是mysql的系統資料庫,可以對其保存系統的數據包括mysql資料庫的信息,資料庫root賬號,普通賬號,以及資料庫的名稱,還有資料庫的一些表還有一些數字型的數據類型結構都會有所保存。

mysql資料庫的優點

(1)MySQL資料庫是用C和C++語言編寫的,並且使用了多種編輯器進行測試,以保證源碼的可移植性。

(2)支持多個操作系統例如:Windows、Linux、Mac OS等等。

(3)支持多線程,可以充分的利用CPU資源。

(4)為多種編程語言提供API,包括C語言、Java、PHP、Python語言等。

(5)MySQL優化了SQL演算法,有效的提高了查詢速度。

(6)MySQL內提供了用於管理,檢查以及優化資料庫操作的管理工具。

(7)它能夠作為一個單獨的應用程序應用在客戶端伺服器網路環境中,也可以作為一個庫嵌入到其他的軟體中並提供多種語言支持。

❾ 資料庫架構選型與落地,看這篇就夠了

隨著時間和業務的發展,資料庫中的數據量增長是不可控的,庫和表中的數據會越來越大,隨之帶來的是更高的 磁碟 IO 系統開銷 ,甚至 性能 上的瓶頸,而單台伺服器的 資源終究是有限 的。

因此在面對業務擴張過程中,應用程序對資料庫系統的 健壯性 安全性 擴展性 提出了更高的要求。

以下,我從資料庫架構、選型與落地來讓大家入門。

資料庫會面臨什麼樣的挑戰呢?

業務剛開始我們只用單機資料庫就夠了,但隨著業務增長,數據規模和用戶規模上升,這個時候資料庫會面臨IO瓶頸、存儲瓶頸、可用性、安全性問題。

為了解決上述的各種問題,資料庫衍生了出不同的架構來解決不同的場景需求。

將資料庫的寫操作和讀操作分離,主庫接收寫請求,使用多個從庫副本負責讀請求,從庫和主庫同步更新數據保持數據一致性,從庫可以水平擴展,用於面對讀請求的增加。

這個模式也就是常說的讀寫分離,針對的是小規模數據,而且存在大量讀操作的場景。

因為主從的數據是相同的,一旦主庫宕機的時候,從庫可以 切換為主庫提供寫入 ,所以這個架構也可以提高資料庫系統的 安全性 可用性

優點:

缺點:

在資料庫遇到 IO瓶頸 過程中,如果IO集中在某一塊的業務中,這個時候可以考慮的就是垂直分庫,將熱點業務拆分出去,避免由 熱點業務 密集IO請求 影響了其他正常業務,所以垂直分庫也叫 業務分庫

優點:

缺點:

在資料庫遇到存儲瓶頸的時候,由於數據量過大造成索引性能下降。

這個時候可以考慮將數據做水平拆分,針對數據量巨大的單張表,按照某種規則,切分到多張表裡面去。

但是這些表還是在同一個庫中,所以庫級別的資料庫操作還是有IO瓶頸(單個伺服器的IO有上限)。

所以水平分表主要還是針對 數據量較大 ,整體業務 請求量較低 的場景。

優點:

缺點:

四、分庫分表

在資料庫遇到存儲瓶頸和IO瓶頸的時候,數據量過大造成索引性能下降,加上同一時間需要處理大規模的業務請求,這個時候單庫的IO上限會限制處理效率。

所以需要將單張表的數據切分到多個伺服器上去,每個伺服器具有相應的庫與表,只是表中數據集合不同。

分庫分表能夠有效地緩解單機和單庫的 性能瓶頸和壓力 ,突破IO、連接數、硬體資源等的瓶頸。

優點:

缺點:

註:分庫還是分表核心關鍵是有沒有IO瓶頸

分片方式都有什麼呢?

RANGE(范圍分片)

將業務表中的某個 關鍵欄位排序 後,按照順序從0到10000一個表,10001到20000一個表。最常見的就是 按照時間切分 (月表、年表)。

比如將6個月前,甚至一年前的數據切出去放到另外的一張表,因為隨著時間流逝,這些表的數據被查詢的概率變小,銀行的交易記錄多數是採用這種方式。

優點:

缺點:

HASH(哈希分片)

將訂單作為主表,然後將其相關的業務表作為附表,取用戶id然後 hash取模 ,分配到不同的數據表或者資料庫上。

優點:

缺點:

講到這里,我們已經知道資料庫有哪些架構,解決的是哪些問題,因此, 我們在日常設計中需要根據數據的特點,數據的傾向性,數據的安全性等來選擇不同的架構

那麼,我們應該如何選擇資料庫架構呢?

雖然把上面的架構全部組合在一起可以形成一個強大的高可用,高負載的資料庫系統,但是架構選擇合適才是最重要的。

混合架構雖然能夠解決所有的場景的問題,但是也會面臨更多的挑戰,你以為的完美架構,背後其實有著更多的坑。

1、對事務支持

分庫分表後(無論是垂直還是水平拆分),就成了分布式事務了,如果依賴資料庫本身的分布式事務管理功能去執行事務,將付出高昂的性能代價(XA事務);如果由應用程序去協助控制,形成程序邏輯上的事務,又會造成編程方面的負擔(TCC、SAGA)。

2、多庫結果集合並 (group by,order by)

由於數據分布於不同的資料庫中,無法直接對其做分頁、分組、排序等操作,一般應對這種多庫結果集合並的查詢業務都需要採用數據清洗、同步等其他手段處理(TIDB、KUDU等)。

3、數據延遲

主從架構下的多副本機制和水平分庫後的聚合庫都會存在主數據和副本數據之間的延遲問題。

4、跨庫join

分庫分表後表之間的關聯操作將受到限制,我們無法join位於不同分庫的表(垂直),也無法join分表粒度不同的表(水平), 結果原本一次查詢就能夠完成的業務,可能需要多次查詢才能完成。

5、分片擴容

水平分片之後,一旦需要做擴容時。需要將對應的數據做一次遷移,成本代價都極高的。

6、ID生成

分庫分表後由於資料庫獨立,原有的基於資料庫自增ID將無法再使用,這個時候需要採用其他外部的ID生成方案。

一、應用層依賴類(JDBC)

這類分庫分表中間件的特點就是和應用強耦合,需要應用顯示依賴相應的jar包(以Java為例),比如知名的TDDL、當當開源的 sharding-jdbc 、蘑菇街的TSharding等。

此類中間件的基本思路就是重新實現JDBC的API,通過重新實現 DataSource PrepareStatement 等操作資料庫的介面,讓應用層在 基本 不改變業務代碼的情況下透明地實現分庫分表的能力。

中間件給上層應用提供熟悉的JDBC API,內部通過 sql解析 sql重寫 sql路由 等一系列的准備工作獲取真正可執行的sql,然後底層再按照傳統的方法(比如資料庫連接池)獲取物理連接來執行sql,最後把數據 結果合並 處理成ResultSet返回給應用層。

優點

缺點

二、中間層代理類(Proxy)

這類分庫分表中間件的核心原理是在應用和資料庫的連接之間搭起一個 代理層 ,上層應用以 標準的MySQL協議 來連接代理層,然後代理層負責 轉發請求 到底層的MySQL物理實例,這種方式對應用只有一個要求,就是只要用MySQL協議來通信即可。

所以用MySQL Navicat這種純的客戶端都可以直接連接你的分布式資料庫,自然也天然 支持所有的編程語言

在技術實現上除了和應用層依賴類中間件基本相似外,代理類的分庫分表產品必須實現標準的MySQL協議,某種意義上講資料庫代理層轉發的就是MySQL協議請求,就像Nginx轉發的是Http協議請求。

比較有代表性的產品有開創性質的Amoeba、阿里開源的Cobar、社區發展比較好的 Mycat (基於Cobar開發)等。

優點

缺點

JDBC方案 :無中心化架構,兼容市面上大多數關系型資料庫,適用於開發高性能的輕量級 OLTP 應用(面向前台)。

Proxy方案 :提供靜態入口以及異構語言的支持,適用於 OLAP 應用(面向後台)以及對分片資料庫進行管理和運維的場景。

混合方案 :在大型復雜系統中存在面向C端用戶的前台應用,也有面向企業分析的後台應用,這個時候就可以採用混合模式。

JDBC 採用無中心化架構,適用於 Java 開發的高性能的輕量級 OLTP 應用;Proxy 提供靜態入口以及異構語言的支持,適用於 OLAP 應用以及對分片資料庫進行管理和運維的場景。

ShardingSphere是一套開源的分布式資料庫中間件解決方案組成的生態圈,它由 Sharding-JDBC Sharding-Proxy Sharding-Sidecar (計劃中)這3款相互獨立的產品組成,他們均提供標准化的數據分片、分布式事務和資料庫治理功能,可適用於如Java同構、異構語言、容器、雲原生等各種多樣化的應用場景。

ShardingSphere提供的核心功能:

Sharding-Proxy

定位為透明化的 資料庫代理端 ,提供封裝了 資料庫二進制協議的服務端版本 ,用於完成對 異構語言的支持

目前已提供MySQL版本,它可以使用 任何兼容MySQL協議的訪問客戶端 (如:MySQL Command Client, MySQL Workbench, Navicat等)操作數據,對DBA更加友好。

應用程序完全透明 ,可直接當做MySQL使用。

適用於任何兼容MySQL協議的客戶端。

Sharding-JDBC

定位為 輕量級Java框架 ,在Java的JDBC層提供的額外服務。 它使用客戶端直連資料庫,以jar包形式提供服務,無需額外部署和依賴,可理解為 增強版的JDBC驅動,完全兼容JDBC和各種ORM框架

以電商SaaS系統為例,前台應用採用Sharding-JDBC,根據業務場景的差異主要分為三種方案。

分庫(用戶)

問題解析:頭部企業日活高並發高,單獨分庫避免干擾其他企業用戶,用戶數據的增長緩慢可以不分表。

拆分維度:企業ID分庫

拆分策略:頭部企業單獨庫、非頭部企業一個庫

分庫分表(訂單)

問題解析:訂單數據增長速度較快,在分庫之餘需要分表。

拆分維度:企業ID分庫、用戶ID分表

拆分策略:頭部企業單獨庫、非頭部企業一個庫,分庫之後用戶ID取模拆分表

單庫分表(附件)

問題解析:附件數據特點是並發量不大,只需要解決數據增長問題,所以單庫IO足以支撐的情況下分表即可。

拆分維度:用戶ID分表

拆分策略:用戶ID取模分表

問題一:分布式事務

分布式事務過於復雜也是分布式系統最難處理的問題,由於篇幅有限,後續會開篇專講這一塊內容。

問題二:分布式ID

問題三:跨片查詢

舉個例子,以用戶id分片之後,需要根據企業id查詢企業所有用戶信息。

sharding針對跨片查詢也是能夠支持的,本質上sharding的跨片查詢是採用同時查詢多個分片的數據,然後聚合結果返回,這個方式對資源耗費比較大,特別是對資料庫連接資源的消耗。

假設分4個資料庫,8個表,則sharding會同時發出32個SQL去查詢。一下子消耗掉了32個連接;

特別是針對單庫分表的情況要注意,假設單庫分64個表,則要消耗64個連接。如果我們部署了2個節點,這個時候兩個節點同時查詢的話,就會遇到資料庫連接數上限問題(mysql默認100連接數)

問題四:分片擴容

隨著數據增長,每個片區的數據也會達到瓶頸,這個時候需要將原有的分片數量進行增加。由於增加了片區,原先的hash規則也跟著變化,造成了需要將舊數據做遷移。

假設原先1個億的數據,hash分64個表,現在增長到50億的數據,需要擴容到128個表,一旦擴容就需要將這50億的數據做一次遷移,遷移成本是無法想像的。

問題五:一致性哈希

首先,求出每個 伺服器的hash值 ,將其配置到一個 0~2^n 的圓環上 (n通常取32)

其次,用同樣的方法求出待 存儲對象的主鍵 hash值 ,也將其配置到這個圓環上。

然後,從數據映射到的位置開始順時針查找,將數據分布到找到的第一個伺服器節點上。

一致性hash的優點在於加入和刪除節點時只會影響到在哈希環中相鄰的節點,而對其他節點沒有影響。

所以使用一致性哈希在集群擴容過程中可以減少數據的遷移。

好了,這次分享到這里,我們日常的實踐可能只會用到其中一種方案,但它不是資料庫架構的全貌,打開技術視野,才能更好地把存儲工具利用起來。

老規矩,一鍵三連,日入兩千,點贊在看,年薪百萬!

本文作者:Jensen

7年Java老兵,小米主題設計師,手機輸入法設計師,ProcessOn特邀講師。

曾涉獵航空、電信、IoT、垂直電商產品研發,現就職於某知名電商企業。

技術公眾號 【架構師修行錄】 號主,專注於分享日常架構、技術、職場干貨,Java Goals:架構師。

交個朋友,一起成長!

❿ 《深入淺出MySQL資料庫開發優化與管理維護第3版》pdf下載在線閱讀全文,求百度網盤雲資源

《深入淺出MySQL資料庫開發優化與管理維護第3版》網路網盤pdf最新全集下載:
鏈接:https://pan..com/s/1AxoktD-VngFdL1vsIBS_mw

?pwd=grx5 提取碼:grx5
簡介:《深入淺出MySQL:資料庫開發、優化與管理維護(第3版)》源自網易公司多位資深資料庫專家數年的經驗總結和MySQL資料庫的使用心得,在之前版本的基礎之上,基於MySQL 5.7版本進行了內容升級,同時也對MySQL 8.0的重要功能進行了介紹。除了對原有內容的更新之外,本書還新增了作者在高可用架構、資料庫自動化運維,以及資料庫中間件方面的實踐和積累。

《深入淺出MySQL:資料庫開發、優化與管理維護(第3版)》分為「基礎篇」「開發篇」「優化篇」「管理維護篇」和「架構篇」5個部分,共32章。基礎篇面向MySQL的初學者,介紹了MySQL的安裝與配置、SQL基礎、MySQL支持的數據類型、MySQL中的運算符、常用函數等內容。開發篇面向的是MySQL設計和開發人員,內容涵蓋了表類型(存儲引擎)的選擇、選擇合適的數據類型、字元集、索引的設計和使用、開發常用資料庫對象、事務控制和鎖定語句、SQL中的安全問題、SQL Mode及相關問題、MySQL分區等。優化篇針對的是開發人員和資料庫管理人員,內容包括SQL優化、鎖問題、優化MySQL Server、磁碟I/O問題、應用優化、PS/SYS資料庫、故障診斷等內容。管理維護篇適合資料庫管理員閱讀,介紹了MySQL高級安裝和升級、MySQL中的常用工具、MySQL日誌、備份與恢復、MySQL許可權與安全、MySQL監控、MySQL常見問題和應用技巧、自動化運維系統的開發等內容。架構篇主要面向高級資料庫管理人員和資料庫架構設計師,內容包括MySQL復制、高可用架構、MySQL中間件等內容。


熱點內容
沒簽名只加密 發布:2025-07-04 18:54:38 瀏覽:253
紅米手機存儲問題 發布:2025-07-04 18:50:43 瀏覽:840
水電煤演算法 發布:2025-07-04 18:36:44 瀏覽:329
天翼視訊緩存文件夾 發布:2025-07-04 18:36:43 瀏覽:96
unix網路編程第2卷 發布:2025-07-04 18:33:41 瀏覽:781
編譯歷史 發布:2025-07-04 18:23:01 瀏覽:851
空調壓縮機種類 發布:2025-07-04 18:13:58 瀏覽:242
中國有ip6伺服器嗎 發布:2025-07-04 17:58:56 瀏覽:726
第六章編譯原理答案 發布:2025-07-04 17:37:55 瀏覽:40
php內存優化 發布:2025-07-04 17:25:54 瀏覽:664