數據庫基礎介紹
面臨的挑戰:
數據庫系統架構:
數據庫DB、數據庫管理系統DBMS(負責數據庫的搭建、使用和維護的系統軟件,通過組織、索引、查詢、修改數據庫文件、實現數據定義、組織、存儲、管理以及數據庫操作、運行和維護等主要功能)、數據庫應用程序DBAP、數據庫管理員DBA。
存儲管理(負責數據的物理存儲和管理)、數據庫管理(負責數據的邏輯管理和操作)、應用管理(負責應用程序與數據庫的交互)、用戶管理(負責用戶的權限管理的數據訪問控制)
數據庫發展史:人工管理——文件系統——數據庫系統。
NoSQL數據庫通過非關系模型來管理數據,適用于管理大規模、非結構化數據,具有高擴展性和高性能的特點;NewSQL數據庫則結合了關系型數據庫和NoSQL數據庫的優點,提供高性能和高擴展性的同時,仍然支持SQL查詢。
面臨的挑戰:
數據類型多樣性和異構處理能力;高度的可擴展性和可伸縮性;時效性;大數據時代;
5V特性:Volume數量、Variety多樣性、Value價值、Velocity速度、Veracity真實性
數據庫類型:
結構化數據:指可以使用關系型數據庫表進行存儲的數據。數據格式固定、利于存儲和管理。
非結構化數據:數據格式不固定、內容多樣化,難以進行標準化處理。適用于大數據存儲和處理技術
半結構化數據:數據格式不固定、但包含標簽或標記,用于描述數據的層次和關系。適用于需要部分結構化信息的場景。
關系型數據庫和非關系型數據庫的區別:
關系型數據庫是垂直擴展,即通過增加單個服務器的性能來提升數據庫的處理能力;非關系數據庫則更適合水平擴展,即通過增加更多的服務器節點來提升整體的處理能力,適用于大規模數據處理和分布式存儲。
關系型數據庫的數據一致性高,支持復雜的查詢和事務處理,適用于結構化數據和嚴格數據一致性的應用場景;非關系型數據庫擴展性強,讀寫性能高,適用于海量數據和高并發訪問的應用場景。
關系型數據庫簡介:(結構化、完全符合ACID)
數據庫:物理操作系統文件或磁盤數據塊的集合
數據庫實例:操作系統中一系列的進程以及為這些進程分配的內存。實例是數據庫管理系統的運行環境,負責管理數據庫的存儲、管理和更新操作。
分布式集群:通過網絡將多個服務器連接起來,形成一個邏輯上集中、物理上分布的大型數據庫系統。
關系型數據庫結構:
查詢管理器:將用戶的查詢語句轉化成內部命令;
存儲管理器:負責執行這些命令,并管理數據庫的物理存儲結構;
數據存儲和查詢流程:
查詢管理器接收用戶查詢,由DML和DDL解釋器進行解釋翻譯——解析后的命令傳給存儲管理器——存儲管理器根據命令對數據庫文件、數據字典和索引進行操作——操作結果返回用戶
模式Schema:包含表及其他數據庫對象、數據類型、函數、操作符等,是對象的集合
允許多個用戶使用一個數據庫而不干擾其他用戶;把數據庫對象組織成邏輯組,讓他們更便于管理;形成命名空間,避免對象的名字沖突。
可以更好地組織和管理數據庫中的各種對象,確保用戶可以高效地共享和使用同一個數據庫而不會互相干擾。
表空間Tablespace:由一個或多個數據文件組成
通過表空間定義數據庫對象文件的存放位置——頻繁使用的索引放置在性能穩定且運算速度快的磁盤上;歸檔數據,使用頻率低,對訪問性能要求低的表存放在速度慢的磁盤上。
數據庫中所有對象在邏輯上都存放在表空間中,在物理上儲存在表空間所屬的數據文件中——通過表空間限制物理空間使用上限,避免磁盤空間被耗盡。
幫助我們更好地管理數據庫對象地存放位置,還能優化數據庫的性能和資源利用。
數據庫對象——表Table
行——記錄、元組;列——字段(包含列名和數據類型)、域
其他數據庫對象:視圖view、index索引、sequence序列、store procedure存儲過程、function函數
事務Transaction:一組原子性地SQL執行單元,具有ACID特性:原子性、一致性、隔離性、持久性
事務結束的標記:COMMIT(提交事務)正常結束;ROLLBACK(回滾事務)異常結束
MySQL 關系型數據庫
物理存儲結構和內存結構:
內存結構(主要用于存儲臨時數據和日志的緩沖)
緩沖池Buffer Pool:用于緩存數據頁和索引頁。通過緩沖池,MySQL可以減少對磁盤的訪問,提高數據讀取和寫入的性能;
更改緩沖區Change Buffer:用于緩存對非唯一索引的更改操作。通過將這些更改操作緩存在內存中,可以減少對磁盤的寫入次數,從而提高寫入性能;
日志緩沖區Log Buffer:在事務提交之前,事務日志會先寫入日志緩沖區,然后再批量寫入磁盤,可以提高事務處理的效率;
物理架構:
系統表空間System Tablespace:存儲引擎的核心部分
文件表空間File-Per-Table Tablespace:每個表都有自己獨立的表空間文件,ibd文件,這種結構使得表的數據和索引存儲在獨立的文件中,便于管理和備份
重做日志Redo Log:用于記錄事務的更改操作,以便在系統崩潰時進行數據恢復,包括Ib_logfile0和Ib_logfile1
撤銷日志Undo Log:記錄日志的撤銷操作,在回滾時恢復數據
MySQL主從復制原理:
主從復制是MySQL常用的一種數據同步機制,能夠實現數據的高可用性和負載均衡
從庫生成兩個線程,一個I/O線程和一個SQL線程
binlog(二進制日志)記錄了主庫上所有數據庫更改操作,IO線程將從主庫獲取到的binlog日志寫入到從庫的Relay Log(中繼日志)。
非關系型數據庫簡介:(最終一致性、易擴展)
關系型數據庫的不足:無法適應多變的數據結構、高并發讀寫的瓶頸、可擴展性的限制
新需求:放松數據一致性的要求;改變固定的表結構;去除事務、關聯等復雜操作;
NoSQL:非關系型數據庫、分布式數據庫。不保證遵循ACID原則的數據存儲系統
特點:靈活性、可擴展性(通過使用分布式硬件集群來橫向擴展)、高性能、功能強大(提供API和數據模型)
應用場景:
鍵值數據庫:代表產品Redis。緩存、會話管理、配置管理、參數、購物車
文檔數據庫:代表產品MongoDB。內容管理、實時分析、博客、新聞網站
向量數據庫:代表產品騰訊云向量數據庫。推薦系統、圖像搜索、推薦系統、自然語言處理等AI領域
其他數據庫:圖形數據庫(Neo4j)、時序數據庫(InfluxDB)、搜索引擎數據庫(Elasticsearch)、列式數據庫(HBase)
云數據庫
云數據庫產品介紹
特征:按需擴展、高可用性、高安全性、多種數據庫類型(關系型、非關系型)、自動化管理
云數據庫架構原理
基本概念:
實例Instance:用戶實際使用的一個最小單位的數據庫服務集合
分片Sharding:將數據分成多個部分,分別存儲在不同的數據庫實例上
集群Cluster:一個數據庫系統由多個數據庫服務器組成
節點組Set:在數據庫集群中,若干服務器組成的邏輯分組。每個節點組包含多個節點,多個節點組組成一個集群。進一步細化集群的管理和調度,提高系統的靈活性和可擴展性
主機、從機Master/Slave:主機直接承擔讀寫;主從復制到從機,從機只可讀不可寫,也叫做備機
數據庫引擎SQL Engine:核心,用于存儲、處理和保護數據。確保數據的一致性和完整性。
整體架構:
VIP(統一入口)——SQL引擎——多個節點組,包括多個數據庫實例,為分布式實例;如果只有一個節點組,就是一個關系型實例——冷備集群
SQL引擎:權限校驗、讀寫分離、全局路由、語法分析、協議解析、路由執行
位于接入層,無主備之分,要求多節點部署;CPU密集型服務,對CPU、內存要求高;英文簡稱proxy
DB模塊:DB節點上部署數據庫服務,屬于IO密集型服務,對IO要求高,建議配置SSD硬盤
Agent屬于旁路模塊,主要承擔DB的狀態監控、存活檢測以及其他功能性任務的執行
目前DB內核可以提供兼容MariaDB和MySQL的不同版本
數據一致性:
強同步(不可退化)、強同步(可退化)、異步
故障轉移步驟:主節點故障、主機降級為從機——參與選舉的從機上報最新的Binlog文件偏移——選擇出Binlog文件偏移最大節點——重建各個節點的主備關系——修改路由請求發給新的主機
高可用性:透明故障轉移、
可擴展性:
如果是關系型實例,除最大規格實例外均提供無縫升級功能。
實例一鍵升級(通過Web控制臺)、分布式性能線性增加(由單個分片性能和分片數量決定)、不存在性能瓶頸(關鍵模塊基于分布式架構設計)、數據庫內核優化(消除開源Bug)
數據備份:實力默認開啟備份并備份7天,用戶需手動設置
讀寫分離
創建賬號時標記為只讀賬號;加入代碼注釋/*slave*/;只讀實例;
高安全性:事前(傳輸加密、數據加密)、事中(內核級安全策略、內置SQL防火墻、防誤操作機制)、事后(運維操作審計、數據庫審計、服務器審計、超級權限控制)
云數據庫分布式原理
云數據庫對業務來說讀寫數據完全透明,對業務呈現的表實際上是邏輯表,邏輯表屏蔽了物理層實際存儲規格,業務無需關心數據層如何存儲,只需要關注基于業務表應該如何設計。
水平分表:
單實例模式:一張庫表(邏輯表/物理表)分布在一個mysql實例上
分布式模式:業務側呈現一張邏輯表、數據存儲在不同的物理分片上。可以通過水平擴展來提升系統的性能和容量,適用于大規模數據和高并發場景。
拆分原理:基于日期順序(time);基于某字段劃分范圍(range,如按用戶id);基于某字段求模(hash);——hash算法原理可以保證數據相對均勻分布
按照shardkey拆分:不同分片負責不同范圍的號段,網關根據SQL中的shardkey發往對應的分片。
更新原理:
創建表時需指定路由字段shardkey——業務SQL的增、刪、改、查包含shardkey時,Proxy通過對shardkey進行hash——數據根據分片算法,將SQL發往對應的分片
查詢原理:
若SQL查詢有明確的shardkey值,將直接從對應分片取出數據;
若沒有shardkey,SQL查詢請求將發往所有分片。返回數據按原始SQL語義進行合并后返回給用戶。
云數據庫TDSQL
云數據庫:可以提供MySQL/MariaDB協議的關系型數據庫實例、TDSQL MySQL版實例。時面向OLTP的分布式數據庫。
產品優勢:互聯網高性能、高安全性、良好的擴展、便捷的運維、數據強一致、金融級高可用。
適用于:
大型應用(超高并發實時交易場景);物聯網數據(PB級數據存儲訪問場景);文件索引(萬億行數據秒級存取);高性價比商業數據庫解決方案。