文章目錄
前言:
這次我們來從頭到腳來重新認識一遍數據庫吧!!!
一、數據庫技術
數據庫技術是數據庫管理的有效技術,研究如何對數據進行科學管理,從而爲人們提供可共享的、安全的、可靠的數據。
數據庫技術包含四個相關概念: 數據,數據庫,數據庫管理系統,數據庫系統
1、數據
- 早起的計算機系統主要用於科學計算,處理的數據是數值型數據:比如整數,浮點數。
- 現代計算機系統的數據概念是廣義的:數字、文字、圖像、圖形、音頻等
- 數據除了表現形式之外,還有語義---->理解:比如60可以是一個班有60個人,也可以是一個人的體重
- 記錄:記錄是在計算機中表示和存儲數據的一種格式或一種方法(比如把多方面的數據來描述一個人,這些數據組織在一起,構成一條記錄)
2、數據庫
數據庫是存放數據的倉庫,是大量數據的集合。
數據庫是長期存儲在計算機內、有組織的、可共享的大量數據的集合。
有組織:按照一定的數據模型組織、描述和存儲。
可共享:爲各種用戶使用
3、數據庫管理系統(DBMS)
數據庫管理系統是一個能夠科學地組織和存儲數據,高效的獲取和維護數據的系統軟件,是位於用戶與操作系統之間的數據管理軟件,包含的功能:
- 數據定義功能(DDL)
- 數據組織、存儲和管理功能
- 數據操縱功能(DML)
- 數據庫的事務管理和運行管理功能
- 數據庫的建立和維護功能
- 與其他軟件系統的通信功能
強調:數據庫管理系統是一個系統軟件的概念,數據庫管理系統和操作系統一樣是計算機系統的基礎軟件
4、數據庫系統(DBS)
數據庫系統是由數據庫、數據庫管理系統(及其應用開發工具)、應用程序和數據庫管理員組成的存儲、管理、處理和維護數據的系統。
(藍色框框都是代表數據庫系統組成部分)
二、數據模型
數據模型是數據庫系統的核心和基礎,所以數據庫系統的發展和數據模型的發展密不可分。所以數據庫模型的劃分維度是數據庫系統劃分的一個重要標準。
1、層次模型
- 層次模型的數據結構就是一棵樹形結構,只有一個節點沒有雙親,也就是根節點(root)
- 根節點意外的其他節點有且只有一個雙親節點
2、網狀模型
- 允許一個以上的節點無雙親
- 一個節點可以有多於一個雙親
例子:如學生選課之類的
注:圖裏的E代表實體,R代表實體之間的關係
3、關係模型
關係模型是一組關係組成的。每個關係的數據結構都是一張規範化的二維表
- 建立在嚴格的數據概念基礎上
- 關係必須是規範化的
- 關係的分量必須是一個不可分的數據項
關係模式: 關係名(屬性1,屬性2,屬性3,……,屬性n)
比如例子中的關係就是 學生(學號,姓名,年齡,性別)
4、面向對象數據模型
傳統的關係數據模型對複製對象的標識能力差,語義表達能力較弱,就提出了面向對象型,但是語言過於複製,沒有得到認可
5、XML數據模型
是一種半結構化數據,半結構化是相對結構化數據而言的,純文本的話就是一種無結構化數據
6、RDF數據模型
RDF是用來描述互聯網資源的標記語言,結構爲(主語(url),謂語(屬性),賓語(具體的值或者另一個數據對象))
三、數據庫類型
1、SQL(Structured Query Language)
用於關係型數據庫(ACID特性)
- 高級的非過程化編程語言,允許用戶在高層數據結構上工作
- 不要求用戶制定數據存放方法
- 不需要用戶瞭解具體數據存放格式
- 還有通用的特點,底層不同的關係型數據庫也可以使用相同的SQL語言
2、NoSQL(Not Only SQL)
非關係型的、分佈式的、不保證滿足ACID特性的一類數據管理系統。
技術特點:
- 對數據進行分區,利用大量節點並行處理獲得高性能
- 降低ACID一致性約束,運行暫時不一致,接收最終一致性。遵循BASE原則
- 各數據分區提供備份(一般三份),提高系統可用性
3、NewSQL
- 指追求NoSQL的可擴展性同時能夠支持關係模型(包括ACID特性)的關係型數據庫系統,主要面向OLTP場景。
- 能夠支持SQL作爲主要的使用語言
四、數據庫架構發展
隨着業務規模增大,數據庫存儲的數據量和承載的業務壓力也不斷增加,數據庫的架構需要隨之變化,爲上層應用提供穩定和高效的數據服務。
-
首先按照主機數量來區分,一個數據庫主機是單機架構,多於一個數據庫主機是多機架構
-
對於單機架構來說,單主機是指應用和database都部署在同一個主機上。而獨立主機則是兩者分開,database專門部署在獨立的數據庫服務器上。
-
對於多機架構來說,按照數據數量是否分片,分爲兩類,分別是分組和分片
-
分組:有主備、主從、多從,是根據服務器擁有的角色不同來劃分的,本質也是利用同步技術在多個庫之間進行數據複製
-
分片(sharding):從數據的獨立性角度來描述架構
分片架構主要表現形式就是水平數據分片架構,把數據分散在多個節點上的分片煩惱幹,每一個分片包括數據庫的一部分,成爲一個shard。(常見的分片算法:根據列表值,範圍取值和hash值進行分片)
○ 無共享(Share-Nothing)架構:是從資源獨立性角度來描述架構。sharding是shared-nothing架構的基礎。
集羣中每一個節點(處理單元)都有自己獨立的CPU/內存/存儲,不存在共享資源,各處理單元處理本地的數據。Shared-Nothing的最小單元可能不是物理節點,而是邏輯上的虛擬處理單元。比如一個物理主機具有4核CPU,部署的時候可以部署4個數據庫實例,也就相當於擁有4個處理單元。○ MPP:大規模並行處理:MPP是從並行計算角度來描述框架
五、數據庫的應用場景
1、聯機事務處理(OLTP)
面向基本的,日常的事務處理,例如銀行儲蓄業務的存取交易,轉賬交易等
特點:
- 大吞吐量:大量的短在線事務,非常快速的查詢處理
- 高併發,(準)實時響應
事務的舉例: 在tb買100塊錢的東西,裏面至少包括兩個操作:
1、買家的賬戶減少100元
2、賣家的賬戶增加100元
支持事務的數據庫管理系統要確保以上兩個操作(也就是整個事務)都能完成,或一起取消,不然會出現100元平白消失或出現的情況。
2、聯機分析處理(OLAP)
是指對數據的查詢和分析操作,通常對大量的歷史數據查詢和分析。涉及到的歷史週期比較長,數據量大,在不同層級上的彙總,聚合操作使得事務處理操作比較複雜。例如報表系統,數據集市,數據倉庫等。
特點:
- 側重於複製查詢,回答一些“戰略性”的問題
- 數據處理方面聚焦於數據的聚合,彙總,分組計算,窗口計算等“分析型”數據加工和操作
- 從多維度去使用和分析數據
3、OLTP和OLAP對比分析
無論OLTP還是OLAP系統都是遵守ACID原則的關係型數據庫。兩者在功能上是相似的,都支持SQL,都可以處理大量數據,都是強一致事務處理。但是對於應用場景來說,OLTP更強調實時性要求,OLAP更強調大數據量分析。
數據處理類型 | OLTP | OLAP |
---|---|---|
分析粒度 | 細節的 | 細節的,綜合的,或提煉的 |
時效性 | 在存取瞬間是準確的 | 代表過去的數據 |
可更新性 | 可更新 | 不更新 |
操作可預知性 | 操作需求事先可知道 | 操作需求事先可能不知道 |
實時性 | 對性能要求高,相應毫秒級別、秒級 | 對性能要求相對寬鬆,相應分鐘級、小時級 |
數據量 | 一個時刻操作一條或幾條記錄,數據量小 | 一個時刻操作一集合,數據量大 |
驅動方式 | 事務驅動 | 分析驅動 |
應用類型 | 面向應用 | 面向分析 |
應用場景 | 支持日常運營 | 支持管理需求 |
典型應用 | 銀行核心系統、信用卡系統 | ACRM、風險管理 |
六、2020年3月數據庫排行
可以去看每個月數據庫的排行:
https://db-engines.com/