資料庫技術概述
資料(data)
早期計算機系統主要用于科學計算,資料主要指數值型資料
現代的計算機系統資料是廣義的,包括數字、文字、視訊、音頻等
語義:一個資料可以代表不同的屬性
資料庫(database,db)
資料庫是存放資料的倉庫,是大量資料的集合
資料庫中資料的特點:永久存儲、有組織、可共享
資料庫管理系統(dbms)
資料庫管理系統是一個能夠科學地組織和存儲資料,高效的擷取和維護資料的系統軟體,是位于使用者和作業系統之間的資料管理軟體。
功能主要包括:資料定義功能;資料組織、存儲和管理功能;資料操縱功能;資料庫的事務管理和運作管理功能;資料庫的建立和維護功能;與其他軟體系統的通信功能。
資料庫系統(database system,dbs)
資料庫系統是由資料庫、資料庫管理系統(及其應用開發工具)、應用程式和資料庫管理者組成的存儲、管理、處理和維護資料的系統。
資料庫技術發展史
資料庫技術應資料管理任務的需要而産生
資料管理的發展
應用需求推動
軟硬體的飛速發展為基礎
三個階段:人工管理、檔案系統、資料庫系統
資料管理三個階段比較
資料庫系統優勢
整體資料的結構化
資料的共享性高,備援度低且易擴充
資料獨立性高(實體、邏輯)
統一管理和控制(安全性保護、完整性檢查、并發控制、資料庫恢複)
資料庫系統發展特點
資料庫的發展集中表現在資料模型的發展上
與其他計算機技術交叉結合
面向應用領域發展資料庫新技術
三大經典資料模型
層次模型
有且僅有一個節點沒有雙親,則為根節點(root)
根節點以外的節點有且隻有一個雙親節點
網狀模型
允許一個以上節點無雙親
一個節點可以有多個雙親
關系模型
建立在嚴格的資料概念基礎上
關系必須是規範化的
關系的分量必須是一個不可分的資料項
三種模型對比
結構化查詢語言(structured query language)-sql語言
進階的非過程化程式設計語言,允許使用者在高層資料結構上工作
不要求使用者指定資料存放方法
不需要使用者了解具體資料存放方式
底層結構完全不同的各種關系型資料庫系統可以使用相同的sql語言作為資料操作和管理的接口
關系型資料庫acid特性
原子性(atomicity):事務是資料庫的邏輯工作機關,事務中的操作,要麼都做,要麼都不做
一緻性(consistency):事務的執行結果必須是使資料庫從一個一緻性狀态轉到另一個一緻性狀态
隔離性(isolation):資料庫中一個事務的執行不能被其他事物幹擾。即一個事務的内部操作及使用的資料對其他事務是隔離的,并發執行的各個事務不能互相幹擾
持久性(durability):事務一旦送出對資料庫中資料的改變是永久的。送出後的操作或者故障不會對事務的操作結果産生任何影響
資料管理技術的新挑戰
高度可擴充性和可伸縮性
資料類型多樣和異構處理能力
資料處理時效性要求
大資料時代來臨
nosql(not only sql)
非關系型的、分布式的、不保證滿足acid特性的一類資料管理系統
技術特點:
對資料進行分區(partitioning),利用大量節點并行處理獲得高性能,同時能夠采用橫向擴充方式(scale out)
降低acid一緻性限制,允許暫時不一緻,接受最終一緻性。遵循base(basically available,soft state,eventual consistency)原則
各資料分區提供備份(一般是三份),應對節點故障,提高系統可用性
newsql
指追求nosql的可擴充性同時能夠支援關系模型(包括acid特性)的關系型資料庫系統,主要面向oltp場景
能夠支援sql作為主要的使用語言
關系型資料庫架構介紹
随着業務規模增大,資料庫存儲的資料量和承載的業務壓力也不斷增大,資料庫的架構需随之變化,為上層應用提供穩定和高效的資料服務。
單機架構
為了避免應用服務和資料庫服務對資源的競争,單機架構也從早期的單主機模式發展到資料庫獨立主機模式,把應用和資料服務分開。應用服務可以增加伺服器數量,進行負載均衡,增大系統并發能力。
優點:
集中部署,運維友善
缺點:
可擴充性
資料庫單機架構擴充性隻有縱向擴充(scale-up)。通過增加硬體配置來提升性能,但單台主機的硬體可配置的資源會遇到上限
存在單點故障
擴容的時候往往需要停機擴容,服務停止
硬體故障導緻整個服務不可用,甚至資料丢失
單機會遇到性能瓶頸
分組架構——主備
資料庫部署在兩台伺服器,其中承擔資料讀寫服務的伺服器稱為“主機”
另一台伺服器利用資料同步機制把主機的資料複制過來,稱為“備機”
同一時刻,隻有一台伺服器對外提供資料
應用不需要針對資料庫故障來增加開發量
相對單機架構提升了資料容錯性
資源浪費,備機和主機同等配置,但長期範圍内基本上資源限制,無法利用
性能壓力還是集中在單機上,無法解決性能瓶頸問題
當出現故障時,主備機切換需要一定的人工幹預或者監控
分組架構——主從
部署模式和主備機模式相似,備機(backup)上升為從機(slave),對外提供一定的資料服務
通過讀寫分離方式分散壓力
寫入、修改、删除操作,在寫庫(主機)上完成
把查詢請求,配置設定到讀庫(從機)
提升資源使用率,适合讀多寫少的應用場景
在大并發讀的使用場景,可以使用負載均衡在多個主機間進行平衡
從機的擴充性比較靈活,擴容操作不會影響到業務進行
延遲問題,資料同步到從機資料庫時有延遲,是以應用必須能夠容忍短暫的不一緻性,對于一緻性要求非常高的場景不适合
寫操作的性能壓力還是集中在主機上
主機出現故障,需要實作主從切換,人工幹預需要響應時間自動切換複雜度較高
分組架構——多主(雙活、多活)
資料庫伺服器互為主從,同時對外提供完整的資料服務
資源使用率較高的同時降低了單點故障的風險
雙主機都接受寫資料,要實作資料雙向同步。雙向複制同樣會帶來延遲問題,極端情況下可以資料丢失
資料庫數量增加會導緻資料同步問題變得極為複雜,實際應用中多見雙機模式
共享存儲多活架構(shared disk)
一種特殊的多主架構
資料庫伺服器共享資料存儲,而多個伺服器實作均衡負載
多個計算伺服器提供高可用服務,提供了進階别的可用性。可伸縮性,避免了伺服器叢集的單點故障問題
比較友善的橫向擴充能夠增加整體系統并行處理能力
實作技術難度大
當存儲器接口寬帶達到飽和的時候,增加節點并不能獲得更高的性能,存儲io容易成為整個系統的性能瓶頸
分片(sharding)架構
水準資料分片,主要算法有:根據清單值、範圍取值、hash值進行資料分片
資料分散在叢集内的各個節點上,所有節點可以獨立性工作
無共享(share-nothing)架構
叢集中每一個節點(處理單元)都完全擁有自己獨立的cpu/記憶體/存儲,不存在共享資源
各節點(處理單元)處理自己本地的資料,處理結果可以向上層彙總或者通過通信協定在節點間流轉
節點是互相獨立的,擴充性強。整個叢集擁有強大的并行處理能力
mpp架構(massively parallel processing,大規模并行處理)
mpp是将任務并行的分散到多個伺服器和節點上,在每個節點上計算完成後,将各自部分的結果彙總在一起得到最終的結果
特征:
任務并行執行,分布式計算
資料庫架構特點對比
關系型資料庫主流應用場景
聯機事務處理(online transaction processing)
oltp是傳統關系資料庫的主要應用,面向基本的,日常的事務處理,例如銀行儲蓄業務的存取交易,轉賬交易等。
特點:
大吞吐量:大量的短線上事務(插入、更新、删除),非常快速的查詢處理
高并發,實時響應
典型的oltp場景:
零售系統
金融交易系統
火車票銷售系統
秒殺活動
聯機分析處理(online analytical processing)
聯機分析處理的概念最早是e.f.codd于1993年相對于oltp系統提出的
是指對資料的查詢和分析操作,通常對大量的曆史資料查詢和分析。涉及到的曆史周期比較長,資料量大,在不同層級上的彙總,聚合操作使得事務處理操作比較複雜
主要面向側重複雜查詢,回答一些“戰略性”的問題
資料處理方面聚焦于資料的聚合,彙總,分組計算,視窗計算等“分析型”資料加工和操作
從多元度去使用和分析資料
典型的olap場景:
報表系統,crm系統
金融風險預測預警系統、反洗錢系統
資料集市,資料倉庫
資料庫性能衡量名額
tpc(transaction processing performence council,事務處理性能委員會)
tpc-c規範——面向oltp系統
流量名額:tpmc(tpm-transcations per minuete,即每分鐘測試系統處理的事務數量)
成本效益名額:price(測試系統價格)/tpmc
tpc-h規範——面向olap系統
流量名額:qphh-query per hour,即每小時處理的複雜查詢數量
需要考慮測試資料集合大小,分為不同的測試資料集,指定了22個資料查詢語句,可以根據産品微調
測試場景:資料加載,power能力測試和throughput測試
oltp個olap對比分析